psychopy 2024.2.4__py3-none-any.whl → 2024.2.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of psychopy might be problematic. Click here for more details.

Files changed (63) hide show
  1. psychopy/.DS_Store +0 -0
  2. psychopy/CHANGELOG.txt +204 -0
  3. psychopy/GIT_SHA +1 -1
  4. psychopy/VERSION +1 -1
  5. psychopy/app/locale/ar_001/.DS_Store +0 -0
  6. psychopy/app/locale/ar_001/LC_MESSAGE/.DS_Store +0 -0
  7. psychopy/app/locale/ar_001/LC_MESSAGE/messages.po +1511 -3256
  8. psychopy/app/runner/runner.py +18 -8
  9. psychopy/experiment/_experiment.py +32 -7
  10. psychopy/iohub/client/__init__.py +17 -0
  11. psychopy/iohub/client/keyboard.py +5 -0
  12. psychopy/iohub/devices/mouse/linux2.py +4 -0
  13. psychopy/iohub/devices/mouse/win32.py +5 -0
  14. psychopy/tests/data/test_loaded_namespace/test_counterbalance.psyexp +142 -0
  15. psychopy/tests/data/test_loaded_namespace/test_custom_missing.psyexp +129 -0
  16. psychopy/tests/data/test_loaded_namespace/test_missing_counterbalance.psyexp +116 -0
  17. psychopy/tests/data/test_loaded_namespace/test_mix_exp.psyexp +181 -0
  18. psychopy/tests/data/test_loaded_namespace/test_mix_missing.psyexp +140 -0
  19. psychopy/tests/data/test_loaded_namespace/test_mix_name_calibration.psyexp +164 -0
  20. psychopy/tests/test_experiment/test_experiment.py +96 -0
  21. {psychopy-2024.2.4.dist-info → psychopy-2024.2.5.dist-info}/METADATA +1 -1
  22. {psychopy-2024.2.4.dist-info → psychopy-2024.2.5.dist-info}/RECORD +25 -55
  23. psychopy/app/locale/zh_CN/LC_MESSAGE/zh_CN.mo +0 -0
  24. psychopy/app/locale/zh_CN/LC_MESSAGE/zh_CN.po +0 -6127
  25. psychopy/app/locale/zh_CN/LC_MESSAGE/zh_CN_allFlagged.mo +0 -0
  26. psychopy/app/locale/zh_CN/LC_MESSAGE/zh_CN_allFlagged.po +0 -7366
  27. psychopy/demos/builder/Design Templates/randomisedBlocks/html/index.html +0 -23
  28. psychopy/demos/builder/Design Templates/randomisedBlocks/html/randomisedBlocks-legacy-browsers.js +0 -423
  29. psychopy/demos/builder/Design Templates/randomisedBlocks/html/randomisedBlocks.js +0 -427
  30. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/chooseBlock.xlsx +0 -0
  31. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/facesBlock.xlsx +0 -0
  32. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/housesBlock.xlsx +0 -0
  33. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/face01.jpg +0 -0
  34. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/face02.jpg +0 -0
  35. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/face03.jpg +0 -0
  36. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/house01.jpg +0 -0
  37. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/house02.jpg +0 -0
  38. psychopy/demos/builder/Design Templates/randomisedBlocks/html/resources/stims/house03.jpg +0 -0
  39. psychopy/demos/builder/Design Templates/randomisedBlocks/randomisedBlocks.py +0 -330
  40. psychopy/demos/builder/Feature Demos/eyetracking/eyetracking.xml +0 -298
  41. psychopy/demos/builder/Feature Demos/eyetracking/eyetracking.xsd +0 -120
  42. psychopy/demos/builder/Tools/gammaCalibration/gamma_correction_visual.psyexp +0 -323
  43. psychopy/demos/builder/Tools/gammaCalibration/gamma_correction_visual.py +0 -562
  44. psychopy/demos/builder/Tools/gammaCalibration/questStairs.xlsx +0 -0
  45. psychopy/demos/builder/Tools/gammaCalibration/readme.md +0 -0
  46. psychopy/demos/builder/Tools/gammaCalibration/resources/low_contrast.png +0 -0
  47. psychopy/demos/builder/Tools/gammaCalibration/resources/make_2nd_order_tex.py +0 -59
  48. psychopy/demos/builder/Tools/gammaCalibration/resources/second_order_tex.png +0 -0
  49. psychopy/demos/coder/stimuli/radialGratingContracting.py +0 -29
  50. psychopy/hardware/serialport.py +0 -51
  51. psychopy/tests/data/__test.png +0 -0
  52. psychopy/tests/data/corrFullRandom_local.csv +0 -16
  53. psychopy/tests/data/corrFullRandom_local.tsv +0 -6
  54. psychopy/tests/data/testLoopsBlocks.psyexp_local.py +0 -328
  55. psychopy/tests/data/text2_height.png +0 -0
  56. psychopy/tests/data/text2_normAddBlend.png +0 -0
  57. psychopy/tests/data/text2_normHexbackground.png +0 -0
  58. psychopy/tests/data/text2_stencil.png +0 -0
  59. psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.csv +0 -9
  60. psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.csv +0 -9
  61. {psychopy-2024.2.4.dist-info → psychopy-2024.2.5.dist-info}/WHEEL +0 -0
  62. {psychopy-2024.2.4.dist-info → psychopy-2024.2.5.dist-info}/entry_points.txt +0 -0
  63. {psychopy-2024.2.4.dist-info → psychopy-2024.2.5.dist-info}/licenses/LICENSE +0 -0
@@ -490,7 +490,6 @@ class RunnerPanel(wx.Panel, ScriptProcess, handlers.ThemeMixin):
490
490
 
491
491
  # setup ribbon
492
492
  self.ribbon = RunnerRibbon(self)
493
- self.ribbon.buttons['pyswitch'].setMode(0)
494
493
  self.mainSizer.Add(self.ribbon, border=0, flag=wx.EXPAND | wx.ALL)
495
494
 
496
495
  # Setup splitter
@@ -843,25 +842,36 @@ class RunnerPanel(wx.Panel, ScriptProcess, handlers.ThemeMixin):
843
842
  del self.entries[self.currentFile] # remove from our tracking dictionary
844
843
  self.expCtrl.DeleteItem(self.currentSelection) # from wx control
845
844
  self.app.updateWindowMenu()
846
-
847
- def onRunModeToggle(self, evt):
845
+
846
+ def updateRunModeIcons(self, evt=None):
848
847
  """
849
- Function to execute when switching between pilot and run modes
848
+ Function to update run/pilot icons according to run mode
850
849
  """
851
- mode = evt.GetInt()
852
- # update buttons
850
+ mode = self.ribbon.buttons['pyswitch'].mode
853
851
  # show/hide run buttons
854
852
  for key in ("pyrun", "jsrun"):
855
853
  self.ribbon.buttons[key].Show(mode)
856
854
  # hide/show pilot buttons
857
855
  for key in ("pypilot", "jspilot"):
858
856
  self.ribbon.buttons[key].Show(not mode)
857
+ # update
858
+ self.ribbon.Layout()
859
+
860
+ def onRunModeToggle(self, evt):
861
+ """
862
+ Function to execute when switching between pilot and run modes
863
+ """
864
+ mode = evt.GetInt()
865
+ # update buttons
866
+ self.updateRunModeIcons()
859
867
  # update experiment mode
860
868
  if self.currentExperiment is not None:
861
869
  # find any Builder windows with this experiment open
862
870
  for frame in self.app.getAllFrames(frameType='builder'):
863
871
  if frame.exp == self.currentExperiment:
864
- frame.ribbon.buttons['pyswitch'].setMode(mode)
872
+ frame.ribbon.buttons['pyswitch'].setMode(mode, silent=True)
873
+ if hasattr(frame, "updateRunModeIcons"):
874
+ frame.updateRunModeIcons()
865
875
  # update current selection
866
876
  runMode = "pilot"
867
877
  if mode:
@@ -904,7 +914,7 @@ class RunnerPanel(wx.Panel, ScriptProcess, handlers.ThemeMixin):
904
914
  # disable stop
905
915
  self.ribbon.buttons['pystop'].Disable()
906
916
  # switch mode
907
- self.ribbon.buttons['pyswitch'].setMode(runMode == "run", silent=True)
917
+ self.ribbon.buttons['pyswitch'].setMode(runMode == "run")
908
918
  # update
909
919
  self.updateAlerts()
910
920
  self.app.updateWindowMenu()
@@ -770,6 +770,34 @@ class Experiment:
770
770
 
771
771
  return exp
772
772
 
773
+ def _getValidRoutineName(self, routineNode, modifiedNames):
774
+ """
775
+ Find valid routine name
776
+
777
+ Parameters
778
+ ----------
779
+ routineNode : Routine
780
+ Routine, Standalone Routine, or Unknown Routine node being read
781
+ from XML file
782
+ modifiedNames : List[str]
783
+ Names that have been modified within the XML file
784
+
785
+ Modifies:
786
+ -------
787
+ modifiedNames : List[str]
788
+ Appends name (str) if name was changed
789
+
790
+ Returns
791
+ -------
792
+ routineGoodName : str
793
+ Validated name of routine being added, meaning no duplicate names
794
+ """
795
+ routineGoodName = self.namespace.makeValid(routineNode.get('name'))
796
+ if routineGoodName != routineNode.get('name'):
797
+ modifiedNames.append(routineNode.get('name'))
798
+ self.namespace.add(routineGoodName)
799
+ return routineGoodName
800
+
773
801
  def loadFromXML(self, filename):
774
802
  """Loads an xml file and parses the builder Experiment from it
775
803
  """
@@ -826,11 +854,7 @@ class Experiment:
826
854
  # get each routine node from the list of routines
827
855
  for routineNode in routinesNode:
828
856
  if routineNode.tag == "Routine":
829
- routineGoodName = self.namespace.makeValid(
830
- routineNode.get('name'))
831
- if routineGoodName != routineNode.get('name'):
832
- modifiedNames.append(routineNode.get('name'))
833
- self.namespace.user.append(routineGoodName)
857
+ routineGoodName = self._getValidRoutineName(routineNode, modifiedNames)
834
858
  routine = Routine(name=routineGoodName, exp=self)
835
859
  # self._getXMLparam(params=routine.params, paramNode=routineNode)
836
860
  self.routines[routineNode.get('name')] = routine
@@ -898,12 +922,13 @@ class Experiment:
898
922
  if component not in routine:
899
923
  routine.append(component)
900
924
  else:
925
+ routineGoodName = self._getValidRoutineName(routineNode, modifiedNames)
901
926
  if routineNode.tag in allRoutines:
902
927
  # If not a routine, may be a standalone routine
903
- routine = allRoutines[routineNode.tag](exp=self, name=routineNode.get('name'))
928
+ routine = allRoutines[routineNode.tag](exp=self, name=routineGoodName)
904
929
  else:
905
930
  # Otherwise treat as unknown
906
- routine = allRoutines['UnknownRoutine'](exp=self, name=routineNode.get('name'))
931
+ routine = allRoutines['UnknownRoutine'](exp=self, name=routineGoodName)
907
932
  # Apply all params
908
933
  for paramNode in routineNode:
909
934
  if paramNode.tag == "Param":
@@ -10,6 +10,7 @@ import time
10
10
  import subprocess
11
11
  import json
12
12
  import signal
13
+ import atexit
13
14
  from weakref import proxy
14
15
 
15
16
  import psutil
@@ -31,6 +32,8 @@ from psychopy import constants
31
32
 
32
33
  getTime = Computer.getTime
33
34
 
35
+ SHUTDOWN_FUNCS = []
36
+
34
37
  _currentSessionInfo = None
35
38
 
36
39
  def windowInfoDict(win):
@@ -1000,6 +1003,9 @@ class ioHubConnection():
1000
1003
  Computer.iohub_process_id = self._server_process.pid
1001
1004
  Computer.iohub_process = psutil.Process(self._server_process.pid)
1002
1005
 
1006
+ global SHUTDOWN_FUNCS
1007
+ SHUTDOWN_FUNCS.append(self._shutDownServer)
1008
+
1003
1009
  # >>>>> Create open UDP port to ioHub Server
1004
1010
  server_udp_port = self._iohub_server_config.get('udp_port', 9000)
1005
1011
  from ..net import UDPClientConnection
@@ -1451,6 +1457,17 @@ class ioEvent():
1451
1457
  self.type,
1452
1458
  self.id)
1453
1459
 
1460
+
1461
+ def shutdownActiveConnections():
1462
+ """Shutdown any active ioHub connections that are currently running.
1463
+ """
1464
+ activeConnection = ioHubConnection.getActiveConnection()
1465
+ if activeConnection is not None and hasattr(activeConnection, 'shutdown'):
1466
+ activeConnection.shutdown()
1467
+
1468
+
1469
+ atexit.register(shutdownActiveConnections)
1470
+
1454
1471
  _lazyImports = """
1455
1472
  from psychopy.iohub.client.connect import launchHubServer
1456
1473
  from psychopy.iohub.client import keyboard
@@ -229,6 +229,11 @@ class Keyboard(ioHubDeviceView):
229
229
  """
230
230
  kb_state = self.getCurrentDeviceState()
231
231
 
232
+ # catch anything that is not a dictionary, usually indicates an error
233
+ if type(kb_state) is not dict:
234
+ raise RuntimeError(
235
+ 'Keyboard device state request failed, got: %s' % kb_state)
236
+
232
237
  events = {int(k): v for k, v in list(kb_state.get('events').items())}
233
238
  pressed_keys = {int(k): v for k, v in list(kb_state.get('pressed_keys', {}).items())}
234
239
 
@@ -90,6 +90,10 @@ class Mouse(MouseDevice):
90
90
  logged_time = currentSec()
91
91
  event_array = event[0]
92
92
 
93
+ if self._iohub_server is None or self._iohub_server._psychopy_windows is None:
94
+ # Do not report event if no ioHub server is running or no psychopy window is open
95
+ return True
96
+
93
97
  psychowins = self._iohub_server._psychopy_windows.keys()
94
98
  report_all = self.getConfiguration().get('report_system_wide_events', True)
95
99
  if report_all is False and psychowins and event_array[-1] not in psychowins:
@@ -178,6 +178,11 @@ class Mouse(MouseDevice):
178
178
  if self.isReportingEvents():
179
179
  logged_time = currentSec()
180
180
  report_system_wide_events = self.getConfiguration().get('report_system_wide_events', True)
181
+
182
+ if self._iohub_server is None or self._iohub_server._psychopy_windows is None:
183
+ # Do not report event if no ioHub server is running or no psychopy window is open
184
+ return True
185
+
181
186
  pyglet_window_hnds = self._iohub_server._psychopy_windows.keys()
182
187
  if event.Window in pyglet_window_hnds:
183
188
  pass
@@ -0,0 +1,142 @@
1
+ <?xml version="1.0" ?>
2
+ <PsychoPy2experiment encoding="utf-8" version="2024.3.0">
3
+ <Settings>
4
+ <Param val="ptb" valType="str" updates="None" name="Audio lib"/>
5
+ <Param val="" valType="str" updates="None" name="Completed URL"/>
6
+ <Param val="auto" valType="str" updates="None" name="Data file delimiter"/>
7
+ <Param val="u'data/%s_%s_%s' % (expInfo['participant'], expName, expInfo['date'])" valType="code" updates="None" name="Data filename"/>
8
+ <Param val="True" valType="bool" updates="None" name="Enable Escape"/>
9
+ <Param val="Thank you for your patience." valType="str" updates="None" name="End Message"/>
10
+ <Param val="{'participant':'f&quot;{randint(0, 999999):06.0f}&quot;', 'session':'001'}" valType="code" updates="None" name="Experiment info"/>
11
+ <Param val="True" valType="bool" updates="None" name="Force stereo"/>
12
+ <Param val="True" valType="bool" updates="None" name="Full-screen window"/>
13
+ <Param val="" valType="str" updates="None" name="HTML path"/>
14
+ <Param val="" valType="str" updates="None" name="Incomplete URL"/>
15
+ <Param val="testMonitor" valType="str" updates="None" name="Monitor"/>
16
+ <Param val="[]" valType="list" updates="None" name="Resources"/>
17
+ <Param val="False" valType="bool" updates="None" name="Save csv file"/>
18
+ <Param val="False" valType="bool" updates="None" name="Save excel file"/>
19
+ <Param val="False" valType="bool" updates="None" name="Save hdf5 file"/>
20
+ <Param val="True" valType="bool" updates="None" name="Save log file"/>
21
+ <Param val="True" valType="bool" updates="None" name="Save psydat file"/>
22
+ <Param val="True" valType="bool" updates="None" name="Save wide csv file"/>
23
+ <Param val="1" valType="num" updates="None" name="Screen"/>
24
+ <Param val="True" valType="bool" updates="None" name="Show info dlg"/>
25
+ <Param val="False" valType="bool" updates="None" name="Show mouse"/>
26
+ <Param val="height" valType="str" updates="None" name="Units"/>
27
+ <Param val="" valType="str" updates="None" name="Use version"/>
28
+ <Param val="(1024, 768)" valType="list" updates="None" name="Window size (pixels)"/>
29
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
30
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
31
+ <Param val="avg" valType="str" updates="None" name="blendMode"/>
32
+ <Param val="float" valType="str" updates="None" name="clockFormat"/>
33
+ <Param val="{'thisRow.t': 'priority.CRITICAL', 'expName': 'priority.LOW'}" valType="dict" updates="None" name="colPriority"/>
34
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
35
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
36
+ <Param val="warning" valType="code" updates="None" name="consoleLoggingLevel"/>
37
+ <Param val="default" valType="str" updates="None" name="ecSampleRate"/>
38
+ <Param val="100.1.1.1" valType="str" updates="None" name="elAddress"/>
39
+ <Param val="FILTER_LEVEL_2" valType="str" updates="None" name="elDataFiltering"/>
40
+ <Param val="FILTER_LEVEL_OFF" valType="str" updates="None" name="elLiveFiltering"/>
41
+ <Param val="EYELINK 1000 DESKTOP" valType="str" updates="None" name="elModel"/>
42
+ <Param val="ELLIPSE_FIT" valType="str" updates="None" name="elPupilAlgorithm"/>
43
+ <Param val="PUPIL_AREA" valType="str" updates="None" name="elPupilMeasure"/>
44
+ <Param val="1000" valType="num" updates="None" name="elSampleRate"/>
45
+ <Param val="False" valType="bool" updates="None" name="elSimMode"/>
46
+ <Param val="RIGHT_EYE" valType="str" updates="None" name="elTrackEyes"/>
47
+ <Param val="PUPIL_CR_TRACKING" valType="str" updates="None" name="elTrackingMode"/>
48
+ <Param val="test_load_counterbalance" valType="str" updates="None" name="expName"/>
49
+ <Param val="" valType="str" updates="None" name="expVersion"/>
50
+ <Param val="on Sync" valType="str" updates="None" name="exportHTML"/>
51
+ <Param val="None" valType="str" updates="None" name="eyetracker"/>
52
+ <Param val="" valType="code" updates="None" name="frameRate"/>
53
+ <Param val="Attempting to measure frame rate of screen, please wait..." valType="str" updates="None" name="frameRateMsg"/>
54
+ <Param val="127.0.0.1" valType="str" updates="None" name="gpAddress"/>
55
+ <Param val="4242" valType="num" updates="None" name="gpPort"/>
56
+ <Param val="ioHub" valType="str" updates="None" name="keyboardBackend"/>
57
+ <Param val="info" valType="code" updates="None" name="logging level"/>
58
+ <Param val="True" valType="bool" updates="None" name="measureFrameRate"/>
59
+ <Param val="MIDDLE_BUTTON" valType="list" updates="None" name="mgBlink"/>
60
+ <Param val="CONTINUOUS" valType="str" updates="None" name="mgMove"/>
61
+ <Param val="0.5" valType="num" updates="None" name="mgSaccade"/>
62
+ <Param val="neon.local" valType="str" updates="None" name="plCompanionAddress"/>
63
+ <Param val="8080" valType="num" updates="None" name="plCompanionPort"/>
64
+ <Param val="0.6" valType="num" updates="None" name="plConfidenceThreshold"/>
65
+ <Param val="" valType="str" updates="None" name="plPupilCaptureRecordingLocation"/>
66
+ <Param val="127.0.0.1" valType="str" updates="None" name="plPupilRemoteAddress"/>
67
+ <Param val="50020" valType="num" updates="None" name="plPupilRemotePort"/>
68
+ <Param val="1000" valType="num" updates="None" name="plPupilRemoteTimeoutMs"/>
69
+ <Param val="False" valType="bool" updates="None" name="plPupillometryOnly"/>
70
+ <Param val="psychopy_iohub_surface" valType="str" updates="None" name="plSurfaceName"/>
71
+ <Param val="0" valType="code" updates="None" name="runMode"/>
72
+ <Param val="False" valType="bool" updates="None" name="rush"/>
73
+ <Param val="time" valType="str" updates="None" name="sortColumns"/>
74
+ <Param val="" valType="str" updates="None" name="tbLicenseFile"/>
75
+ <Param val="" valType="str" updates="None" name="tbModel"/>
76
+ <Param val="60" valType="num" updates="None" name="tbSampleRate"/>
77
+ <Param val="" valType="str" updates="None" name="tbSerialNo"/>
78
+ <Param val="pyglet" valType="str" updates="None" name="winBackend"/>
79
+ </Settings>
80
+ <Routines>
81
+ <Routine name="trial">
82
+ <RoutineSettingsComponent name="trial" plugin="None">
83
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
84
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
85
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
86
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
87
+ <Param val="" valType="str" updates="constant" name="desc"/>
88
+ <Param val="False" valType="bool" updates="None" name="disabled"/>
89
+ <Param val="" valType="code" updates="None" name="durationEstim"/>
90
+ <Param val="False" valType="code" updates="None" name="forceNonSlip"/>
91
+ <Param val="trial" valType="code" updates="None" name="name"/>
92
+ <Param val="True" valType="bool" updates="None" name="saveStartStop"/>
93
+ <Param val="" valType="code" updates="constant" name="skipIf"/>
94
+ <Param val="duration (s)" valType="str" updates="None" name="stopType"/>
95
+ <Param val="" valType="code" updates="constant" name="stopVal"/>
96
+ <Param val="False" valType="bool" updates="None" name="useWindowParams"/>
97
+ </RoutineSettingsComponent>
98
+ </Routine>
99
+ <CounterbalanceRoutine name="counterbalance">
100
+ <Param name="conditionsFile" updates="None" val="" valType="file"/>
101
+ <Param name="conditionsVariable" updates="None" val="" valType="code"/>
102
+ <Param name="disabled" updates="None" val="False" valType="bool"/>
103
+ <Param name="endExperimentOnDepletion" updates="None" val="ignore" valType="code"/>
104
+ <Param name="nGroups" updates="None" val="2" valType="code"/>
105
+ <Param name="nReps" updates="None" val="1" valType="code"/>
106
+ <Param name="nSlots" updates="None" val="10" valType="code"/>
107
+ <Param name="name" updates="None" val="counterbalance" valType="code"/>
108
+ <Param name="saveData" updates="None" val="True" valType="bool"/>
109
+ <Param name="saveRemaining" updates="None" val="True" valType="bool"/>
110
+ <Param name="specMode" updates="None" val="uniform" valType="str"/>
111
+ </CounterbalanceRoutine>
112
+ <CounterbalanceRoutine name="counterbalance_2">
113
+ <Param name="conditionsFile" updates="None" val="" valType="file"/>
114
+ <Param name="conditionsVariable" updates="None" val="" valType="code"/>
115
+ <Param name="disabled" updates="None" val="False" valType="bool"/>
116
+ <Param name="endExperimentOnDepletion" updates="None" val="ignore" valType="code"/>
117
+ <Param name="nGroups" updates="None" val="2" valType="code"/>
118
+ <Param name="nReps" updates="None" val="1" valType="code"/>
119
+ <Param name="nSlots" updates="None" val="10" valType="code"/>
120
+ <Param name="name" updates="None" val="counterbalance_2" valType="code"/>
121
+ <Param name="saveData" updates="None" val="True" valType="bool"/>
122
+ <Param name="saveRemaining" updates="None" val="True" valType="bool"/>
123
+ <Param name="specMode" updates="None" val="uniform" valType="str"/>
124
+ </CounterbalanceRoutine>
125
+ <CounterbalanceRoutine name="counterbalance_3">
126
+ <Param name="conditionsFile" updates="None" val="" valType="file"/>
127
+ <Param name="conditionsVariable" updates="None" val="" valType="code"/>
128
+ <Param name="disabled" updates="None" val="False" valType="bool"/>
129
+ <Param name="endExperimentOnDepletion" updates="None" val="ignore" valType="code"/>
130
+ <Param name="nGroups" updates="None" val="2" valType="code"/>
131
+ <Param name="nReps" updates="None" val="1" valType="code"/>
132
+ <Param name="nSlots" updates="None" val="10" valType="code"/>
133
+ <Param name="name" updates="None" val="counterbalance_3" valType="code"/>
134
+ <Param name="saveData" updates="None" val="True" valType="bool"/>
135
+ <Param name="saveRemaining" updates="None" val="True" valType="bool"/>
136
+ <Param name="specMode" updates="None" val="uniform" valType="str"/>
137
+ </CounterbalanceRoutine>
138
+ </Routines>
139
+ <Flow>
140
+ <Routine name="trial"/>
141
+ </Flow>
142
+ </PsychoPy2experiment>
@@ -0,0 +1,129 @@
1
+ <?xml version="1.0" ?>
2
+ <PsychoPy2experiment encoding="utf-8" version="2024.3.0">
3
+ <Settings>
4
+ <Param val="ptb" valType="str" updates="None" name="Audio lib"/>
5
+ <Param val="" valType="str" updates="None" name="Completed URL"/>
6
+ <Param val="auto" valType="str" updates="None" name="Data file delimiter"/>
7
+ <Param val="u'data/%s_%s_%s' % (expInfo['participant'], expName, expInfo['date'])" valType="code" updates="None" name="Data filename"/>
8
+ <Param val="True" valType="bool" updates="None" name="Enable Escape"/>
9
+ <Param val="Thank you for your patience." valType="str" updates="None" name="End Message"/>
10
+ <Param val="{'participant':'f&quot;{randint(0, 999999):06.0f}&quot;', 'session':'001'}" valType="code" updates="None" name="Experiment info"/>
11
+ <Param val="True" valType="bool" updates="None" name="Force stereo"/>
12
+ <Param val="True" valType="bool" updates="None" name="Full-screen window"/>
13
+ <Param val="" valType="str" updates="None" name="HTML path"/>
14
+ <Param val="" valType="str" updates="None" name="Incomplete URL"/>
15
+ <Param val="testMonitor" valType="str" updates="None" name="Monitor"/>
16
+ <Param val="[]" valType="list" updates="None" name="Resources"/>
17
+ <Param val="False" valType="bool" updates="None" name="Save csv file"/>
18
+ <Param val="False" valType="bool" updates="None" name="Save excel file"/>
19
+ <Param val="False" valType="bool" updates="None" name="Save hdf5 file"/>
20
+ <Param val="True" valType="bool" updates="None" name="Save log file"/>
21
+ <Param val="True" valType="bool" updates="None" name="Save psydat file"/>
22
+ <Param val="True" valType="bool" updates="None" name="Save wide csv file"/>
23
+ <Param val="1" valType="num" updates="None" name="Screen"/>
24
+ <Param val="True" valType="bool" updates="None" name="Show info dlg"/>
25
+ <Param val="False" valType="bool" updates="None" name="Show mouse"/>
26
+ <Param val="height" valType="str" updates="None" name="Units"/>
27
+ <Param val="" valType="str" updates="None" name="Use version"/>
28
+ <Param val="(1024, 768)" valType="list" updates="None" name="Window size (pixels)"/>
29
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
30
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
31
+ <Param val="avg" valType="str" updates="None" name="blendMode"/>
32
+ <Param val="float" valType="str" updates="None" name="clockFormat"/>
33
+ <Param val="{'thisRow.t': 'priority.CRITICAL', 'expName': 'priority.LOW'}" valType="dict" updates="None" name="colPriority"/>
34
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
35
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
36
+ <Param val="warning" valType="code" updates="None" name="consoleLoggingLevel"/>
37
+ <Param val="default" valType="str" updates="None" name="ecSampleRate"/>
38
+ <Param val="100.1.1.1" valType="str" updates="None" name="elAddress"/>
39
+ <Param val="FILTER_LEVEL_2" valType="str" updates="None" name="elDataFiltering"/>
40
+ <Param val="FILTER_LEVEL_OFF" valType="str" updates="None" name="elLiveFiltering"/>
41
+ <Param val="EYELINK 1000 DESKTOP" valType="str" updates="None" name="elModel"/>
42
+ <Param val="ELLIPSE_FIT" valType="str" updates="None" name="elPupilAlgorithm"/>
43
+ <Param val="PUPIL_AREA" valType="str" updates="None" name="elPupilMeasure"/>
44
+ <Param val="1000" valType="num" updates="None" name="elSampleRate"/>
45
+ <Param val="False" valType="bool" updates="None" name="elSimMode"/>
46
+ <Param val="RIGHT_EYE" valType="str" updates="None" name="elTrackEyes"/>
47
+ <Param val="PUPIL_CR_TRACKING" valType="str" updates="None" name="elTrackingMode"/>
48
+ <Param val="test_custom_mix" valType="str" updates="None" name="expName"/>
49
+ <Param val="" valType="str" updates="None" name="expVersion"/>
50
+ <Param val="on Sync" valType="str" updates="None" name="exportHTML"/>
51
+ <Param val="None" valType="str" updates="None" name="eyetracker"/>
52
+ <Param val="" valType="code" updates="None" name="frameRate"/>
53
+ <Param val="Attempting to measure frame rate of screen, please wait..." valType="str" updates="None" name="frameRateMsg"/>
54
+ <Param val="127.0.0.1" valType="str" updates="None" name="gpAddress"/>
55
+ <Param val="4242" valType="num" updates="None" name="gpPort"/>
56
+ <Param val="ioHub" valType="str" updates="None" name="keyboardBackend"/>
57
+ <Param val="info" valType="code" updates="None" name="logging level"/>
58
+ <Param val="True" valType="bool" updates="None" name="measureFrameRate"/>
59
+ <Param val="MIDDLE_BUTTON" valType="list" updates="None" name="mgBlink"/>
60
+ <Param val="CONTINUOUS" valType="str" updates="None" name="mgMove"/>
61
+ <Param val="0.5" valType="num" updates="None" name="mgSaccade"/>
62
+ <Param val="neon.local" valType="str" updates="None" name="plCompanionAddress"/>
63
+ <Param val="8080" valType="num" updates="None" name="plCompanionPort"/>
64
+ <Param val="0.6" valType="num" updates="None" name="plConfidenceThreshold"/>
65
+ <Param val="" valType="str" updates="None" name="plPupilCaptureRecordingLocation"/>
66
+ <Param val="127.0.0.1" valType="str" updates="None" name="plPupilRemoteAddress"/>
67
+ <Param val="50020" valType="num" updates="None" name="plPupilRemotePort"/>
68
+ <Param val="1000" valType="num" updates="None" name="plPupilRemoteTimeoutMs"/>
69
+ <Param val="False" valType="bool" updates="None" name="plPupillometryOnly"/>
70
+ <Param val="psychopy_iohub_surface" valType="str" updates="None" name="plSurfaceName"/>
71
+ <Param val="0" valType="code" updates="None" name="runMode"/>
72
+ <Param val="False" valType="bool" updates="None" name="rush"/>
73
+ <Param val="time" valType="str" updates="None" name="sortColumns"/>
74
+ <Param val="" valType="str" updates="None" name="tbLicenseFile"/>
75
+ <Param val="" valType="str" updates="None" name="tbModel"/>
76
+ <Param val="60" valType="num" updates="None" name="tbSampleRate"/>
77
+ <Param val="" valType="str" updates="None" name="tbSerialNo"/>
78
+ <Param val="pyglet" valType="str" updates="None" name="winBackend"/>
79
+ </Settings>
80
+ <Routines>
81
+ <Routine name="trial">
82
+ <RoutineSettingsComponent name="trial" plugin="None">
83
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
84
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
85
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
86
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
87
+ <Param val="" valType="str" updates="constant" name="desc"/>
88
+ <Param val="False" valType="bool" updates="None" name="disabled"/>
89
+ <Param val="" valType="code" updates="None" name="durationEstim"/>
90
+ <Param val="False" valType="code" updates="None" name="forceNonSlip"/>
91
+ <Param val="trial" valType="code" updates="None" name="name"/>
92
+ <Param val="True" valType="bool" updates="None" name="saveStartStop"/>
93
+ <Param val="" valType="code" updates="constant" name="skipIf"/>
94
+ <Param val="duration (s)" valType="str" updates="None" name="stopType"/>
95
+ <Param val="" valType="code" updates="constant" name="stopVal"/>
96
+ <Param val="False" valType="bool" updates="None" name="useWindowParams"/>
97
+ </RoutineSettingsComponent>
98
+ </Routine>
99
+ <CounterbalanceRoutine name="custom_2">
100
+ <Param name="conditionsFile" updates="None" val="" valType="file"/>
101
+ <Param name="conditionsVariable" updates="None" val="" valType="code"/>
102
+ <Param name="disabled" updates="None" val="False" valType="bool"/>
103
+ <Param name="endExperimentOnDepletion" updates="None" val="True" valType="code"/>
104
+ <Param name="nGroups" updates="None" val="2" valType="code"/>
105
+ <Param name="nReps" updates="None" val="1" valType="code"/>
106
+ <Param name="nSlots" updates="None" val="10" valType="code"/>
107
+ <Param name="name" updates="None" val="custom_2" valType="code"/>
108
+ <Param name="saveData" updates="None" val="True" valType="bool"/>
109
+ <Param name="saveRemaining" updates="None" val="True" valType="bool"/>
110
+ <Param name="specMode" updates="None" val="uniform" valType="str"/>
111
+ </CounterbalanceRoutine>
112
+ <CounterbalanceRoutine name="counterbalance_2">
113
+ <Param name="conditionsFile" updates="None" val="" valType="file"/>
114
+ <Param name="conditionsVariable" updates="None" val="" valType="code"/>
115
+ <Param name="disabled" updates="None" val="False" valType="bool"/>
116
+ <Param name="endExperimentOnDepletion" updates="None" val="ignore" valType="code"/>
117
+ <Param name="nGroups" updates="None" val="2" valType="code"/>
118
+ <Param name="nReps" updates="None" val="1" valType="code"/>
119
+ <Param name="nSlots" updates="None" val="10" valType="code"/>
120
+ <Param name="name" updates="None" val="counterbalance_2" valType="code"/>
121
+ <Param name="saveData" updates="None" val="True" valType="bool"/>
122
+ <Param name="saveRemaining" updates="None" val="True" valType="bool"/>
123
+ <Param name="specMode" updates="None" val="uniform" valType="str"/>
124
+ </CounterbalanceRoutine>
125
+ </Routines>
126
+ <Flow>
127
+ <Routine name="trial"/>
128
+ </Flow>
129
+ </PsychoPy2experiment>
@@ -0,0 +1,116 @@
1
+ <?xml version="1.0" ?>
2
+ <PsychoPy2experiment encoding="utf-8" version="2024.3.0">
3
+ <Settings>
4
+ <Param val="ptb" valType="str" updates="None" name="Audio lib"/>
5
+ <Param val="" valType="str" updates="None" name="Completed URL"/>
6
+ <Param val="auto" valType="str" updates="None" name="Data file delimiter"/>
7
+ <Param val="u'data/%s_%s_%s' % (expInfo['participant'], expName, expInfo['date'])" valType="code" updates="None" name="Data filename"/>
8
+ <Param val="True" valType="bool" updates="None" name="Enable Escape"/>
9
+ <Param val="Thank you for your patience." valType="str" updates="None" name="End Message"/>
10
+ <Param val="{'participant':'f&quot;{randint(0, 999999):06.0f}&quot;', 'session':'001'}" valType="code" updates="None" name="Experiment info"/>
11
+ <Param val="True" valType="bool" updates="None" name="Force stereo"/>
12
+ <Param val="True" valType="bool" updates="None" name="Full-screen window"/>
13
+ <Param val="" valType="str" updates="None" name="HTML path"/>
14
+ <Param val="" valType="str" updates="None" name="Incomplete URL"/>
15
+ <Param val="testMonitor" valType="str" updates="None" name="Monitor"/>
16
+ <Param val="[]" valType="list" updates="None" name="Resources"/>
17
+ <Param val="False" valType="bool" updates="None" name="Save csv file"/>
18
+ <Param val="False" valType="bool" updates="None" name="Save excel file"/>
19
+ <Param val="False" valType="bool" updates="None" name="Save hdf5 file"/>
20
+ <Param val="True" valType="bool" updates="None" name="Save log file"/>
21
+ <Param val="True" valType="bool" updates="None" name="Save psydat file"/>
22
+ <Param val="True" valType="bool" updates="None" name="Save wide csv file"/>
23
+ <Param val="1" valType="num" updates="None" name="Screen"/>
24
+ <Param val="True" valType="bool" updates="None" name="Show info dlg"/>
25
+ <Param val="False" valType="bool" updates="None" name="Show mouse"/>
26
+ <Param val="height" valType="str" updates="None" name="Units"/>
27
+ <Param val="" valType="str" updates="None" name="Use version"/>
28
+ <Param val="(1024, 768)" valType="list" updates="None" name="Window size (pixels)"/>
29
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
30
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
31
+ <Param val="avg" valType="str" updates="None" name="blendMode"/>
32
+ <Param val="float" valType="str" updates="None" name="clockFormat"/>
33
+ <Param val="{'thisRow.t': 'priority.CRITICAL', 'expName': 'priority.LOW'}" valType="dict" updates="None" name="colPriority"/>
34
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
35
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
36
+ <Param val="warning" valType="code" updates="None" name="consoleLoggingLevel"/>
37
+ <Param val="default" valType="str" updates="None" name="ecSampleRate"/>
38
+ <Param val="100.1.1.1" valType="str" updates="None" name="elAddress"/>
39
+ <Param val="FILTER_LEVEL_2" valType="str" updates="None" name="elDataFiltering"/>
40
+ <Param val="FILTER_LEVEL_OFF" valType="str" updates="None" name="elLiveFiltering"/>
41
+ <Param val="EYELINK 1000 DESKTOP" valType="str" updates="None" name="elModel"/>
42
+ <Param val="ELLIPSE_FIT" valType="str" updates="None" name="elPupilAlgorithm"/>
43
+ <Param val="PUPIL_AREA" valType="str" updates="None" name="elPupilMeasure"/>
44
+ <Param val="1000" valType="num" updates="None" name="elSampleRate"/>
45
+ <Param val="False" valType="bool" updates="None" name="elSimMode"/>
46
+ <Param val="RIGHT_EYE" valType="str" updates="None" name="elTrackEyes"/>
47
+ <Param val="PUPIL_CR_TRACKING" valType="str" updates="None" name="elTrackingMode"/>
48
+ <Param val="test_load_missing_counterbalance" valType="str" updates="None" name="expName"/>
49
+ <Param val="" valType="str" updates="None" name="expVersion"/>
50
+ <Param val="on Sync" valType="str" updates="None" name="exportHTML"/>
51
+ <Param val="None" valType="str" updates="None" name="eyetracker"/>
52
+ <Param val="" valType="code" updates="None" name="frameRate"/>
53
+ <Param val="Attempting to measure frame rate of screen, please wait..." valType="str" updates="None" name="frameRateMsg"/>
54
+ <Param val="127.0.0.1" valType="str" updates="None" name="gpAddress"/>
55
+ <Param val="4242" valType="num" updates="None" name="gpPort"/>
56
+ <Param val="ioHub" valType="str" updates="None" name="keyboardBackend"/>
57
+ <Param val="info" valType="code" updates="None" name="logging level"/>
58
+ <Param val="True" valType="bool" updates="None" name="measureFrameRate"/>
59
+ <Param val="MIDDLE_BUTTON" valType="list" updates="None" name="mgBlink"/>
60
+ <Param val="CONTINUOUS" valType="str" updates="None" name="mgMove"/>
61
+ <Param val="0.5" valType="num" updates="None" name="mgSaccade"/>
62
+ <Param val="neon.local" valType="str" updates="None" name="plCompanionAddress"/>
63
+ <Param val="8080" valType="num" updates="None" name="plCompanionPort"/>
64
+ <Param val="0.6" valType="num" updates="None" name="plConfidenceThreshold"/>
65
+ <Param val="" valType="str" updates="None" name="plPupilCaptureRecordingLocation"/>
66
+ <Param val="127.0.0.1" valType="str" updates="None" name="plPupilRemoteAddress"/>
67
+ <Param val="50020" valType="num" updates="None" name="plPupilRemotePort"/>
68
+ <Param val="1000" valType="num" updates="None" name="plPupilRemoteTimeoutMs"/>
69
+ <Param val="False" valType="bool" updates="None" name="plPupillometryOnly"/>
70
+ <Param val="psychopy_iohub_surface" valType="str" updates="None" name="plSurfaceName"/>
71
+ <Param val="0" valType="code" updates="None" name="runMode"/>
72
+ <Param val="False" valType="bool" updates="None" name="rush"/>
73
+ <Param val="time" valType="str" updates="None" name="sortColumns"/>
74
+ <Param val="" valType="str" updates="None" name="tbLicenseFile"/>
75
+ <Param val="" valType="str" updates="None" name="tbModel"/>
76
+ <Param val="60" valType="num" updates="None" name="tbSampleRate"/>
77
+ <Param val="" valType="str" updates="None" name="tbSerialNo"/>
78
+ <Param val="pyglet" valType="str" updates="None" name="winBackend"/>
79
+ </Settings>
80
+ <Routines>
81
+ <Routine name="trial">
82
+ <RoutineSettingsComponent name="trial" plugin="None">
83
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
84
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
85
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
86
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
87
+ <Param val="" valType="str" updates="constant" name="desc"/>
88
+ <Param val="False" valType="bool" updates="None" name="disabled"/>
89
+ <Param val="" valType="code" updates="None" name="durationEstim"/>
90
+ <Param val="False" valType="code" updates="None" name="forceNonSlip"/>
91
+ <Param val="trial" valType="code" updates="None" name="name"/>
92
+ <Param val="True" valType="bool" updates="None" name="saveStartStop"/>
93
+ <Param val="" valType="code" updates="constant" name="skipIf"/>
94
+ <Param val="duration (s)" valType="str" updates="None" name="stopType"/>
95
+ <Param val="" valType="code" updates="constant" name="stopVal"/>
96
+ <Param val="False" valType="bool" updates="None" name="useWindowParams"/>
97
+ </RoutineSettingsComponent>
98
+ </Routine>
99
+ <CounterbalanceRoutine name="counterbalance_2">
100
+ <Param name="conditionsFile" updates="None" val="" valType="file"/>
101
+ <Param name="conditionsVariable" updates="None" val="" valType="code"/>
102
+ <Param name="disabled" updates="None" val="False" valType="bool"/>
103
+ <Param name="endExperimentOnDepletion" updates="None" val="ignore" valType="code"/>
104
+ <Param name="nGroups" updates="None" val="2" valType="code"/>
105
+ <Param name="nReps" updates="None" val="1" valType="code"/>
106
+ <Param name="nSlots" updates="None" val="10" valType="code"/>
107
+ <Param name="name" updates="None" val="counterbalance_2" valType="code"/>
108
+ <Param name="saveData" updates="None" val="True" valType="bool"/>
109
+ <Param name="saveRemaining" updates="None" val="True" valType="bool"/>
110
+ <Param name="specMode" updates="None" val="uniform" valType="str"/>
111
+ </CounterbalanceRoutine>
112
+ </Routines>
113
+ <Flow>
114
+ <Routine name="trial"/>
115
+ </Flow>
116
+ </PsychoPy2experiment>