psychopy 2024.2.5__py3-none-any.whl → 2025.1.0__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.
- psychopy/CHANGELOG.txt +4 -4
- psychopy/GIT_SHA +1 -1
- psychopy/LICENSE.txt +1 -1
- psychopy/VERSION +1 -1
- psychopy/__init__.py +10 -7
- psychopy/alerts/__init__.py +1 -1
- psychopy/alerts/_alerts.py +53 -17
- psychopy/alerts/_errorHandler.py +3 -4
- psychopy/alerts/alertsCatalogue/3210.yaml +27 -0
- psychopy/alerts/alertsCatalogue/3610.yaml +19 -0
- psychopy/alerts/alertsCatalogue/4130.yaml +19 -0
- psychopy/alerts/alertsCatalogue/alertCategories.yaml +8 -1
- psychopy/alerts/alertsCatalogue/alertmsg.py +1 -1
- psychopy/alerts/alerttools.py +0 -16
- psychopy/app/Resources/betasplash.png +0 -0
- psychopy/app/Resources/betasplash@2x.png +0 -0
- psychopy/app/Resources/classic/case.png +0 -0
- psychopy/app/Resources/classic/case@2x.png +0 -0
- psychopy/app/Resources/classic/fileaudio.png +0 -0
- psychopy/app/Resources/classic/fileaudio@2x.png +0 -0
- psychopy/app/Resources/classic/filecss.png +0 -0
- psychopy/app/Resources/classic/filecss@2x.png +0 -0
- psychopy/app/Resources/classic/filecsv.png +0 -0
- psychopy/app/Resources/classic/filecsv@2x.png +0 -0
- psychopy/app/Resources/classic/filedesign.png +0 -0
- psychopy/app/Resources/classic/filedesign@2x.png +0 -0
- psychopy/app/Resources/classic/filefont.png +0 -0
- psychopy/app/Resources/classic/filefont@2x.png +0 -0
- psychopy/app/Resources/classic/filegit.png +0 -0
- psychopy/app/Resources/classic/filegit@2x.png +0 -0
- psychopy/app/Resources/classic/filehtml.png +0 -0
- psychopy/app/Resources/classic/filehtml@2x.png +0 -0
- psychopy/app/Resources/classic/fileimage.png +0 -0
- psychopy/app/Resources/classic/fileimage@2x.png +0 -0
- psychopy/app/Resources/classic/fileinfo.png +0 -0
- psychopy/app/Resources/classic/fileinfo@2x.png +0 -0
- psychopy/app/Resources/classic/filejs.png +0 -0
- psychopy/app/Resources/classic/filejs@2x.png +0 -0
- psychopy/app/Resources/classic/filejson.png +0 -0
- psychopy/app/Resources/classic/filejson@2x.png +0 -0
- psychopy/app/Resources/classic/filepkg.png +0 -0
- psychopy/app/Resources/classic/filepkg@2x.png +0 -0
- psychopy/app/Resources/classic/filepsyexp.png +0 -0
- psychopy/app/Resources/classic/filepsyexp@2x.png +0 -0
- psychopy/app/Resources/classic/filepy.png +0 -0
- psychopy/app/Resources/classic/filepy@2x.png +0 -0
- psychopy/app/Resources/classic/filetxt.png +0 -0
- psychopy/app/Resources/classic/filetxt@2x.png +0 -0
- psychopy/app/Resources/classic/fileunknown.png +0 -0
- psychopy/app/Resources/classic/fileunknown@2x.png +0 -0
- psychopy/app/Resources/classic/filevideo.png +0 -0
- psychopy/app/Resources/classic/filevideo@2x.png +0 -0
- psychopy/app/Resources/classic/find.png +0 -0
- psychopy/app/Resources/classic/find@2x.png +0 -0
- psychopy/app/Resources/classic/loop.png +0 -0
- psychopy/app/Resources/classic/loop@2x.png +0 -0
- psychopy/app/Resources/classic/regex.png +0 -0
- psychopy/app/Resources/classic/regex@2x.png +0 -0
- psychopy/app/Resources/dark/case.png +0 -0
- psychopy/app/Resources/dark/case@2x.png +0 -0
- psychopy/app/Resources/dark/fileaudio.png +0 -0
- psychopy/app/Resources/dark/fileaudio@2x.png +0 -0
- psychopy/app/Resources/dark/filecss.png +0 -0
- psychopy/app/Resources/dark/filecss@2x.png +0 -0
- psychopy/app/Resources/dark/filecsv.png +0 -0
- psychopy/app/Resources/dark/filecsv@2x.png +0 -0
- psychopy/app/Resources/dark/filedesign.png +0 -0
- psychopy/app/Resources/dark/filedesign@2x.png +0 -0
- psychopy/app/Resources/dark/filefont.png +0 -0
- psychopy/app/Resources/dark/filefont@2x.png +0 -0
- psychopy/app/Resources/dark/filegit.png +0 -0
- psychopy/app/Resources/dark/filegit@2x.png +0 -0
- psychopy/app/Resources/dark/filehtml.png +0 -0
- psychopy/app/Resources/dark/filehtml@2x.png +0 -0
- psychopy/app/Resources/dark/fileimage.png +0 -0
- psychopy/app/Resources/dark/fileimage@2x.png +0 -0
- psychopy/app/Resources/dark/fileinfo.png +0 -0
- psychopy/app/Resources/dark/fileinfo@2x.png +0 -0
- psychopy/app/Resources/dark/filejs.png +0 -0
- psychopy/app/Resources/dark/filejs@2x.png +0 -0
- psychopy/app/Resources/dark/filejson.png +0 -0
- psychopy/app/Resources/dark/filejson@2x.png +0 -0
- psychopy/app/Resources/dark/filepkg.png +0 -0
- psychopy/app/Resources/dark/filepkg@2x.png +0 -0
- psychopy/app/Resources/dark/filepsyexp.png +0 -0
- psychopy/app/Resources/dark/filepsyexp@2x.png +0 -0
- psychopy/app/Resources/dark/filepy.png +0 -0
- psychopy/app/Resources/dark/filepy@2x.png +0 -0
- psychopy/app/Resources/dark/filetxt.png +0 -0
- psychopy/app/Resources/dark/filetxt@2x.png +0 -0
- psychopy/app/Resources/dark/fileunknown.png +0 -0
- psychopy/app/Resources/dark/fileunknown@2x.png +0 -0
- psychopy/app/Resources/dark/filevideo.png +0 -0
- psychopy/app/Resources/dark/filevideo@2x.png +0 -0
- psychopy/app/Resources/dark/find.png +0 -0
- psychopy/app/Resources/dark/find@2x.png +0 -0
- psychopy/app/Resources/dark/loop.png +0 -0
- psychopy/app/Resources/dark/loop@2x.png +0 -0
- psychopy/app/Resources/dark/regex.png +0 -0
- psychopy/app/Resources/dark/regex@2x.png +0 -0
- psychopy/app/Resources/light/case.png +0 -0
- psychopy/app/Resources/light/case@2x.png +0 -0
- psychopy/app/Resources/light/fileaudio.png +0 -0
- psychopy/app/Resources/light/fileaudio@2x.png +0 -0
- psychopy/app/Resources/light/filecss.png +0 -0
- psychopy/app/Resources/light/filecss@2x.png +0 -0
- psychopy/app/Resources/light/filecsv.png +0 -0
- psychopy/app/Resources/light/filecsv@2x.png +0 -0
- psychopy/app/Resources/light/filedesign.png +0 -0
- psychopy/app/Resources/light/filedesign@2x.png +0 -0
- psychopy/app/Resources/light/filefont.png +0 -0
- psychopy/app/Resources/light/filefont@2x.png +0 -0
- psychopy/app/Resources/light/filegit.png +0 -0
- psychopy/app/Resources/light/filegit@2x.png +0 -0
- psychopy/app/Resources/light/filehtml.png +0 -0
- psychopy/app/Resources/light/filehtml@2x.png +0 -0
- psychopy/app/Resources/light/fileimage.png +0 -0
- psychopy/app/Resources/light/fileimage@2x.png +0 -0
- psychopy/app/Resources/light/fileinfo.png +0 -0
- psychopy/app/Resources/light/fileinfo@2x.png +0 -0
- psychopy/app/Resources/light/filejs.png +0 -0
- psychopy/app/Resources/light/filejs@2x.png +0 -0
- psychopy/app/Resources/light/filejson.png +0 -0
- psychopy/app/Resources/light/filejson@2x.png +0 -0
- psychopy/app/Resources/light/filepkg.png +0 -0
- psychopy/app/Resources/light/filepkg@2x.png +0 -0
- psychopy/app/Resources/light/filepsyexp.png +0 -0
- psychopy/app/Resources/light/filepsyexp@2x.png +0 -0
- psychopy/app/Resources/light/filepy.png +0 -0
- psychopy/app/Resources/light/filepy@2x.png +0 -0
- psychopy/app/Resources/light/filetxt.png +0 -0
- psychopy/app/Resources/light/filetxt@2x.png +0 -0
- psychopy/app/Resources/light/fileunknown.png +0 -0
- psychopy/app/Resources/light/fileunknown@2x.png +0 -0
- psychopy/app/Resources/light/filevideo.png +0 -0
- psychopy/app/Resources/light/filevideo@2x.png +0 -0
- psychopy/app/Resources/light/find.png +0 -0
- psychopy/app/Resources/light/find@2x.png +0 -0
- psychopy/app/Resources/light/loop.png +0 -0
- psychopy/app/Resources/light/loop@2x.png +0 -0
- psychopy/app/Resources/light/regex.png +0 -0
- psychopy/app/Resources/light/regex@2x.png +0 -0
- psychopy/app/Resources/routine_templates/Basic.psyexp +0 -1
- psychopy/app/Resources/routine_templates/Misc.psyexp +0 -1
- psychopy/app/Resources/routine_templates/Online.psyexp +0 -2
- psychopy/app/Resources/routine_templates/Trials.psyexp +0 -1
- psychopy/app/Resources/splash.png +0 -0
- psychopy/app/Resources/splash@2x.png +0 -0
- psychopy/app/__init__.py +49 -8
- psychopy/app/__main__.py +3 -0
- psychopy/app/_psychopyApp.py +134 -125
- psychopy/app/builder/builder.py +42 -22
- psychopy/app/builder/dialogs/__init__.py +44 -11
- psychopy/app/builder/dialogs/dlgsCode.py +1 -1
- psychopy/app/builder/dialogs/dlgsConditions.py +1 -1
- psychopy/app/builder/dialogs/findDlg.py +106 -20
- psychopy/app/builder/dialogs/paramCtrls.py +42 -1
- psychopy/app/builder/validators.py +1 -1
- psychopy/app/coder/codeEditorBase.py +8 -8
- psychopy/app/coder/coder.py +32 -29
- psychopy/app/coder/fileBrowser.py +68 -22
- psychopy/app/coder/folding.py +1 -1
- psychopy/app/coder/psychoParser.py +1 -1
- psychopy/app/coder/repl.py +1 -1
- psychopy/app/coder/sourceTree.py +1 -1
- psychopy/app/connections/__init__.py +1 -1
- psychopy/app/connections/news.py +1 -1
- psychopy/app/connections/sendusage.py +1 -1
- psychopy/app/connections/updates.py +1 -1
- psychopy/app/console.py +1 -1
- psychopy/app/errorDlg.py +1 -1
- psychopy/app/frametracker.py +1 -1
- psychopy/app/idle.py +1 -1
- psychopy/app/jobs.py +5 -2
- psychopy/app/linuxconfig/__init__.py +1 -1
- psychopy/app/locale/ar_001/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ar_001/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/cs_CZ/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/da_DK/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/de_DE/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/de_DE/LC_MESSAGE/messages.po +3 -3
- psychopy/app/locale/el_GR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/en_NZ/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/en_US/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_CO/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_CO/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/es_ES/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_ES/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/es_US/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_US/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/et_EE/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/et_EE/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/fa_IR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/fa_IR/LC_MESSAGE/messages.po +1 -1
- psychopy/app/locale/fi_FI/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/fr_FR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/fr_FR/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/he_IL/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/he_IL/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/hi_IN/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/hi_IN/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/hu_HU/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/it_IT/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/it_IT/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/ja_JP/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ja_JP/LC_MESSAGE/messages.po +3421 -2396
- psychopy/app/locale/ko_KR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ms_MY/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ms_MY/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/nl_NL/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/nn_NO/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/pl_PL/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/pt_PT/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/pt_PT/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/ro_RO/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ru_RU/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/sv_SE/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/sv_SE/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/tr_TR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/tr_TR/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/zh_CN/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/zh_CN/LC_MESSAGE/messages.po +3 -3
- psychopy/app/locale/zh_TW/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/zh_TW/LC_MESSAGE/messages.po +2 -2
- psychopy/app/{builder/localizedStrings.py → localizedStrings.py} +173 -26
- psychopy/app/pavlovia_ui/__init__.py +1 -1
- psychopy/app/pavlovia_ui/_base.py +1 -1
- psychopy/app/pavlovia_ui/functions.py +1 -1
- psychopy/app/pavlovia_ui/menu.py +1 -1
- psychopy/app/pavlovia_ui/project.py +1 -1
- psychopy/app/pavlovia_ui/search.py +1 -1
- psychopy/app/pavlovia_ui/sync.py +1 -1
- psychopy/app/pavlovia_ui/user.py +1 -1
- psychopy/app/plugin_manager/dialog.py +34 -96
- psychopy/app/plugin_manager/packages.py +10 -14
- psychopy/app/plugin_manager/plugins.py +64 -4
- psychopy/app/preferencesDlg.py +12 -37
- psychopy/app/psychopyApp.py +130 -44
- psychopy/app/ribbon.py +1 -0
- psychopy/app/runner/runner.py +19 -7
- psychopy/app/runner/scriptProcess.py +11 -6
- psychopy/app/stdout/stdOutRich.py +9 -2
- psychopy/app/themes/fonts.py +1 -1
- psychopy/app/themes/icons.py +2 -38
- psychopy/app/ui/__init__.py +1 -1
- psychopy/app/utils.py +3 -3
- psychopy/assets/default.mp3 +0 -0
- psychopy/assets/fonts/NotoSans-Bold.ttf +0 -0
- psychopy/assets/fonts/NotoSans-BoldItalic.ttf +0 -0
- psychopy/assets/fonts/NotoSans-Italic.ttf +0 -0
- psychopy/assets/fonts/NotoSans-Regular.ttf +0 -0
- psychopy/assets/voicekeyThresholdStim.wav +0 -0
- psychopy/clock.py +4 -1
- psychopy/colors.py +2 -0
- psychopy/core.py +1 -1
- psychopy/data/base.py +1 -1
- psychopy/data/experiment.py +151 -46
- psychopy/data/routine.py +27 -1
- psychopy/data/staircase.py +2 -1
- psychopy/data/trial.py +62 -14
- psychopy/data/utils.py +1 -1
- psychopy/demos/builder/Design Templates/branchedExperiment/branchedExperiment.psyexp +333 -218
- psychopy/demos/builder/Design Templates/psychophysicsStaircase/psychophysicsStaircase.psyexp +261 -239
- psychopy/demos/builder/Design Templates/psychophysicsStairsInterleaved/psychophysicsStaircaseInterleaved.psyexp +319 -180
- psychopy/demos/builder/Design Templates/randomisedBlocks/randomisedBlocks.psyexp +204 -116
- psychopy/demos/builder/Experiments/BART/assets/background.jpg +0 -0
- psychopy/demos/builder/Experiments/BART/assets/blueBalloon.png +0 -0
- psychopy/demos/builder/Experiments/BART/assets/greenBalloon.png +0 -0
- psychopy/demos/builder/Experiments/BART/assets/redBalloon.png +0 -0
- psychopy/demos/builder/Experiments/BART/bart.psyexp +779 -866
- psychopy/demos/builder/Experiments/BigFiveInventory/BFI.psyexp +242 -180
- psychopy/demos/builder/Experiments/GoNoGo/gng.psyexp +419 -406
- psychopy/demos/builder/Experiments/dragAndDrop/README.md +2 -37
- psychopy/demos/builder/Experiments/dragAndDrop/drag_and_drop.psyexp +460 -1204
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/blank_grid.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/make_shapes.psyexp +221 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/readme.md +4 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_1.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_10.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_2.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_3.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_4.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_5.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_6.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_7.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_8.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_9.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solutions.xlsx +0 -0
- psychopy/demos/builder/Experiments/mentalRotation/MentalRotation.psyexp +583 -542
- psychopy/demos/builder/Experiments/navon/NavonTask.psyexp +458 -427
- psychopy/demos/builder/Experiments/sternberg/sternberg.psyexp +588 -550
- psychopy/demos/builder/Experiments/stroop/stroop.psyexp +303 -207
- psychopy/demos/builder/Experiments/stroopExtended/stroop.psyexp +390 -215
- psychopy/demos/builder/Experiments/stroopExtended/stroopReverse.psyexp +390 -215
- psychopy/demos/builder/Experiments/stroopVoice/stroopVoice.psyexp +357 -331
- psychopy/demos/builder/Feature Demos/buttonBox/buttonBoxDemo.psyexp +3 -2
- psychopy/demos/builder/Feature Demos/counterbalance/counterbalance.psyexp +287 -277
- psychopy/demos/builder/Feature Demos/gratings/gratings.psyexp +370 -320
- psychopy/demos/builder/Feature Demos/noise/noise.psyexp +452 -399
- psychopy/demos/builder/Feature Demos/panorama/panorama.psyexp +168 -133
- psychopy/demos/builder/Feature Demos/pilotMode/pilotMode.psyexp +4 -3
- psychopy/demos/builder/Feature Demos/progress/progressBar.psyexp +420 -392
- psychopy/demos/builder/Feature Demos/sliders/sliders.psyexp +917 -871
- psychopy/demos/builder/Feature Demos/visualValidator/readme.md +7 -0
- psychopy/demos/builder/Feature Demos/visualValidator/visualValidator.psyexp +200 -0
- psychopy/demos/builder/Hardware/EEG_parallel_component/EEG_triggers_parallel_comp.psyexp +25 -9
- psychopy/demos/builder/Hardware/EEG_serial_code/EEG_triggers_serial_code.psyexp +372 -361
- psychopy/demos/builder/Hardware/EEG_serial_component/EEG_triggers_serial_comp.psyexp +25 -9
- psychopy/demos/builder/Hardware/EGI_netstation/stroop.psyexp +320 -235
- psychopy/demos/builder/Hardware/Eyetracking_visual_search/visualSearch.psyexp +790 -651
- psychopy/demos/builder/Hardware/camera/camera.psyexp +326 -246
- psychopy/demos/builder/Hardware/eyetracking/eyetracking.psyexp +432 -327
- psychopy/demos/builder/Hardware/eyetracking_custom_cal/eyetracking_custom_cal.psyexp +440 -321
- psychopy/demos/builder/Hardware/fMRI/fMRI_demo.psyexp +190 -181
- psychopy/demos/builder/Hardware/lab_streaming_layer/lsl_triggers_demo.psyexp +323 -312
- psychopy/demos/builder/Hardware/lab_streaming_layer/lsl_triggers_demo_legacy.psyexp +360 -0
- psychopy/demos/builder/Hardware/lab_streaming_layer/lsl_triggers_demo_legacy_legacy.psyexp +312 -0
- psychopy/demos/builder/Hardware/lab_streaming_layer_legacy/lsl_triggers_demo_legacy.psyexp +329 -273
- psychopy/demos/builder/Hardware/lab_streaming_layer_legacy/lsl_triggers_demo_legacy_legacy.psyexp +360 -0
- psychopy/demos/builder/Hardware/lab_streaming_layer_legacy/lsl_triggers_demo_legacy_legacy_legacy.psyexp +312 -0
- psychopy/demos/builder/Hardware/microphone/microphone.psyexp +450 -404
- psychopy/demos/builder/Hardware/pump/pump.psyexp +593 -329
- psychopy/demos/builder/Helper Tools/achorVSalignment/FlowCircular-Regular.ttf +0 -0
- psychopy/demos/builder/Helper Tools/achorVSalignment/anchorAlignment.psyexp +336 -274
- psychopy/demos/builder/Helper Tools/clockFace/clockFace.psyexp +200 -149
- psychopy/demos/builder/Helper Tools/colors/colors.psyexp +300 -279
- psychopy/demos/builder/Helper Tools/drawPolygon/drawPolygon.psyexp +677 -564
- psychopy/demos/builder/Helper Tools/keyNameFinder/keyNameFinder.psyexp +214 -158
- psychopy/demos/builder/Helper Tools/spatialUnits/unitDemo.psyexp +195 -146
- psychopy/demos/coder/experiment control/runtimeInfo.py +1 -1
- psychopy/devices/__init__.py +1 -1
- psychopy/event.py +1 -1
- psychopy/exceptions.py +1 -1
- psychopy/experiment/__init__.py +1 -1
- psychopy/experiment/_experiment.py +30 -9
- psychopy/experiment/components/__init__.py +1 -6
- psychopy/experiment/components/_base.py +44 -19
- psychopy/experiment/components/aperture/__init__.py +1 -1
- psychopy/experiment/components/brush/__init__.py +2 -2
- psychopy/experiment/components/button/__init__.py +24 -28
- psychopy/experiment/components/camera/__init__.py +38 -39
- psychopy/experiment/components/code/__init__.py +1 -1
- psychopy/experiment/components/dots/__init__.py +1 -1
- psychopy/experiment/components/eyetracker_record/__init__.py +7 -3
- psychopy/experiment/components/form/__init__.py +3 -3
- psychopy/experiment/components/grating/__init__.py +1 -1
- psychopy/experiment/components/image/__init__.py +1 -1
- psychopy/experiment/components/joyButtons/__init__.py +2 -2
- psychopy/experiment/components/joyButtons/virtualJoyButtons.py +1 -1
- psychopy/experiment/components/joystick/__init__.py +3 -3
- psychopy/experiment/components/joystick/virtualJoystick.py +1 -1
- psychopy/experiment/components/keyboard/__init__.py +98 -122
- psychopy/experiment/components/microphone/__init__.py +54 -98
- psychopy/experiment/components/mouse/__init__.py +92 -93
- psychopy/experiment/components/movie/__init__.py +28 -50
- psychopy/experiment/components/parallelOut/__init__.py +3 -3
- psychopy/experiment/components/polygon/__init__.py +2 -3
- psychopy/experiment/components/roi/__init__.py +2 -2
- psychopy/experiment/components/routineSettings/__init__.py +2 -0
- psychopy/experiment/components/serialOut/__init__.py +7 -7
- psychopy/experiment/components/settings/__init__.py +317 -313
- psychopy/experiment/components/settings/eyetracking.py +108 -0
- psychopy/experiment/components/slider/__init__.py +5 -5
- psychopy/experiment/components/sound/__init__.py +168 -78
- psychopy/experiment/components/soundsensor/__init__.py +361 -0
- psychopy/experiment/components/soundsensor/classic/soundsensor.png +0 -0
- psychopy/experiment/components/soundsensor/classic/soundsensor@2x.png +0 -0
- psychopy/experiment/components/soundsensor/dark/soundsensor.png +0 -0
- psychopy/experiment/components/soundsensor/dark/soundsensor@2x.png +0 -0
- psychopy/experiment/components/soundsensor/light/soundsensor.png +0 -0
- psychopy/experiment/components/soundsensor/light/soundsensor@2x.png +0 -0
- psychopy/experiment/components/static/__init__.py +59 -33
- psychopy/experiment/components/text/__init__.py +2 -6
- psychopy/experiment/components/textbox/__init__.py +3 -7
- psychopy/experiment/components/unknown/__init__.py +2 -0
- psychopy/experiment/components/unknownPlugin/__init__.py +2 -0
- psychopy/experiment/exports.py +1 -1
- psychopy/experiment/flow.py +2 -2
- psychopy/experiment/localization.py +1 -1
- psychopy/experiment/loops.py +43 -10
- psychopy/experiment/params.py +6 -4
- psychopy/experiment/plugins.py +8 -1
- psychopy/experiment/py2js.py +1 -1
- psychopy/experiment/py2js_transpiler.py +1 -1
- psychopy/experiment/routines/__init__.py +1 -1
- psychopy/experiment/routines/_base.py +23 -24
- psychopy/experiment/routines/audioValidator/__init__.py +343 -0
- psychopy/experiment/routines/audioValidator/classic/audio_validator.png +0 -0
- psychopy/experiment/routines/audioValidator/classic/audio_validator@2x.png +0 -0
- psychopy/experiment/routines/audioValidator/dark/audio_validator.png +0 -0
- psychopy/experiment/routines/audioValidator/dark/audio_validator@2x.png +0 -0
- psychopy/experiment/routines/audioValidator/light/audio_validator.png +0 -0
- psychopy/experiment/routines/audioValidator/light/audio_validator@2x.png +0 -0
- psychopy/experiment/routines/eyetracker_calibrate/__init__.py +76 -17
- psychopy/experiment/routines/eyetracker_validate/__init__.py +1 -1
- psychopy/experiment/routines/unknown/__init__.py +2 -0
- psychopy/experiment/routines/{photodiodeValidator → visualValidator}/__init__.py +89 -120
- psychopy/experiment/routines/visualValidator/classic/visual_validator.png +0 -0
- psychopy/experiment/routines/visualValidator/classic/visual_validator@2x.png +0 -0
- psychopy/experiment/routines/visualValidator/dark/visual_validator.png +0 -0
- psychopy/experiment/routines/visualValidator/dark/visual_validator@2x.png +0 -0
- psychopy/experiment/routines/visualValidator/light/visual_validator.png +0 -0
- psychopy/experiment/routines/visualValidator/light/visual_validator@2x.png +0 -0
- psychopy/experiment/utils.py +1 -1
- psychopy/gui/__init__.py +1 -1
- psychopy/gui/qtgui.py +15 -6
- psychopy/gui/wxgui.py +1 -1
- psychopy/hardware/__init__.py +0 -1
- psychopy/hardware/base.py +147 -16
- psychopy/hardware/bbtk/__init__.py +10 -16
- psychopy/hardware/brainproducts.py +7 -13
- psychopy/hardware/button.py +21 -2
- psychopy/hardware/buttonbox/__init__.py +1 -1
- psychopy/hardware/camera/__init__.py +16 -3
- psychopy/hardware/cedrus.py +5 -16
- psychopy/hardware/crs/__init__.py +1 -1
- psychopy/hardware/crs/bits.py +36 -33
- psychopy/hardware/crs/colorcal.py +8 -11
- psychopy/hardware/crs/optical.py +7 -10
- psychopy/hardware/crs/shaders.py +18 -5
- psychopy/hardware/emotiv.py +1 -1
- psychopy/hardware/emulator.py +11 -5
- psychopy/hardware/exceptions.py +86 -0
- psychopy/hardware/forp.py +18 -23
- psychopy/hardware/gammasci.py +8 -3
- psychopy/hardware/iolab.py +8 -19
- psychopy/hardware/joystick/__init__.py +865 -266
- psychopy/hardware/joystick/_base.py +251 -0
- psychopy/hardware/joystick/backend_glfw.py +306 -0
- psychopy/hardware/joystick/backend_pyglet.py +309 -0
- psychopy/hardware/joystick/mappings.py +287 -0
- psychopy/hardware/keyboard.py +4 -2
- psychopy/hardware/labhackers.py +1 -1
- psychopy/hardware/labjacks.py +9 -13
- psychopy/hardware/{photodiode.py → lightsensor.py} +146 -203
- psychopy/hardware/listener.py +9 -8
- psychopy/hardware/manager.py +24 -35
- psychopy/hardware/microphone.py +534 -154
- psychopy/hardware/minolta.py +14 -4
- psychopy/hardware/mouse/__init__.py +1 -1
- psychopy/hardware/photometer/__init__.py +2 -2
- psychopy/hardware/pr.py +14 -4
- psychopy/hardware/qmix.py +18 -27
- psychopy/hardware/serialdevice.py +43 -12
- psychopy/hardware/soundsensor.py +473 -0
- psychopy/hardware/spatial/__init__.py +231 -0
- psychopy/hardware/speaker.py +298 -36
- psychopy/hardware/triggerbox/__init__.py +1 -1
- psychopy/hardware/triggerbox/base.py +1 -1
- psychopy/hardware/triggerbox/parallel.py +1 -1
- psychopy/info.py +1 -1
- psychopy/iohub/devices/eyetracker/__init__.py +10 -18
- psychopy/iohub/devices/eyetracker/calibration/procedure.py +15 -33
- psychopy/iohub/devices/eyetracker/hw/pupil_labs/neon/__init__.py +1 -0
- psychopy/iohub/devices/mouse/linux2.py +2 -1
- psychopy/layout.py +1 -1
- psychopy/liaison.py +91 -39
- psychopy/locale_setup.py +11 -1
- psychopy/localization/__init__.py +1 -1
- psychopy/localization/_localization.py +1 -1
- psychopy/localization/messages.pot +2 -2
- psychopy/logging.py +14 -12
- psychopy/microphone.py +4 -3
- psychopy/misc.py +1 -1
- psychopy/monitors/MonitorCenter.py +3 -3
- psychopy/monitors/__init__.py +1 -1
- psychopy/monitors/calibData.py +1 -1
- psychopy/monitors/calibTools.py +3 -2
- psychopy/platform_specific/__init__.py +1 -1
- psychopy/platform_specific/darwin.py +1 -1
- psychopy/platform_specific/linux.py +1 -1
- psychopy/platform_specific/win32.py +1 -1
- psychopy/plugins/__init__.py +26 -17
- psychopy/plugins/util.py +65 -0
- psychopy/preferences/Darwin.spec +11 -3
- psychopy/preferences/FreeBSD.spec +11 -3
- psychopy/preferences/Linux.spec +11 -3
- psychopy/preferences/Windows.spec +11 -3
- psychopy/preferences/__init__.py +1 -1
- psychopy/preferences/baseNoArch.spec +11 -3
- psychopy/preferences/hints.py +78 -61
- psychopy/preferences/preferences.py +82 -13
- psychopy/projects/__init__.py +1 -1
- psychopy/projects/pavlovia.py +29 -13
- psychopy/scripts/psyexpCompile.py +1 -1
- psychopy/session.py +81 -8
- psychopy/sound/__init__.py +25 -10
- psychopy/sound/_base.py +134 -34
- psychopy/sound/audioclip.py +38 -15
- psychopy/sound/audiodevice.py +1 -1
- psychopy/sound/backend_ptb.py +53 -321
- psychopy/sound/backend_pygame.py +7 -3
- psychopy/sound/backend_pyo.py +53 -22
- psychopy/sound/backend_pysound.py +10 -27
- psychopy/sound/backend_sounddevice.py +33 -21
- psychopy/sound/exceptions.py +1 -1
- psychopy/sound/microphone.py +83 -5
- psychopy/sound/transcribe.py +3 -3
- psychopy/tests/data/test_basic_run.py +1 -0
- psychopy/tests/data/test_sounds/default_16000.wav +0 -0
- psychopy/tests/data/test_sounds/default_192000.wav +0 -0
- psychopy/tests/data/test_sounds/default_22050.wav +0 -0
- psychopy/tests/data/test_sounds/default_32000.wav +0 -0
- psychopy/tests/data/test_sounds/default_44100.wav +0 -0
- psychopy/tests/data/test_sounds/default_48000.wav +0 -0
- psychopy/tests/data/test_sounds/default_8000.wav +0 -0
- psychopy/tests/data/test_sounds/default_96000.wav +0 -0
- psychopy/tests/test_alerts/test_alerttools.py +2 -1
- psychopy/tests/test_app/test_command_line.py +65 -0
- psychopy/tests/test_data/test_TrialHandler2.py +18 -7
- psychopy/tests/test_demos/test_builder_demos.py +1 -1
- psychopy/tests/test_experiment/needs_wx/componsTemplate.txt +5238 -4188
- psychopy/tests/test_experiment/needs_wx/test_components.py +1 -1
- psychopy/tests/test_experiment/test_components/test_RoutineSettingsComponent.py +16 -0
- psychopy/tests/test_experiment/test_components/test_all_components.py +1 -1
- psychopy/tests/test_experiment/test_components/test_base_components.py +26 -17
- psychopy/tests/test_experiment/test_loops.py +12 -4
- psychopy/tests/test_experiment/test_params.py +17 -4
- psychopy/tests/test_experiment/test_routines/test_PhotodiodeValidationRoutine.py +2 -2
- psychopy/tests/test_hardware/test_photodiode.py +66 -0
- psychopy/tests/test_liaison/test_Liaison.py +4 -4
- psychopy/tests/test_misc/test_clock.py +2 -0
- psychopy/tests/test_misc/test_color.py +2 -0
- psychopy/tests/test_misc/test_event.py +1 -0
- psychopy/tests/test_plugins/__init__.py +0 -0
- psychopy/tests/test_plugins/test_plugin_stubs.py +125 -0
- psychopy/tests/test_sound/test_sound.py +111 -40
- psychopy/tests/test_tools/test_colorspacetools.py +24 -23
- psychopy/tests/test_tools/test_mathtools.py +9 -9
- psychopy/tests/test_tools/test_viewtools.py +101 -0
- psychopy/tests/test_validators/__init__.py +0 -0
- psychopy/tests/test_validators/test_voicekeyValidator.py +95 -0
- psychopy/tests/test_visual/test_all_stimuli.py +2 -2
- psychopy/tests/test_visual/test_basevisual.py +37 -7
- psychopy/tests/test_visual/test_button.py +2 -2
- psychopy/tests/test_visual/test_circle.py +10 -2
- psychopy/tests/test_visual/test_dots.py +1 -1
- psychopy/tests/test_visual/test_form.py +13 -13
- psychopy/tests/test_visual/test_gamma.py +3 -3
- psychopy/tests/test_visual/test_image.py +2 -2
- psychopy/tests/test_visual/test_progress.py +2 -2
- psychopy/tests/test_visual/test_roi.py +8 -2
- psychopy/tests/test_visual/test_shape.py +2 -2
- psychopy/tests/test_visual/test_slider.py +2 -2
- psychopy/tests/test_visual/test_target.py +2 -2
- psychopy/tests/test_visual/test_textbox.py +6 -8
- psychopy/tests/test_visual/test_winScalePos.py +6 -5
- psychopy/tests/test_visual/test_window.py +17 -0
- psychopy/tests/utils.py +51 -1
- psychopy/tools/__init__.py +1 -1
- psychopy/tools/arraytools.py +2 -2
- psychopy/tools/attributetools.py +52 -1
- psychopy/tools/audiotools.py +4 -1
- psychopy/tools/colorspacetools.py +6 -4
- psychopy/tools/coordinatetools.py +1 -1
- psychopy/tools/fileerrortools.py +21 -9
- psychopy/tools/filetools.py +2 -2
- psychopy/tools/fontmanager.py +47 -28
- psychopy/tools/gltools.py +2964 -558
- psychopy/tools/imagetools.py +1 -1
- psychopy/tools/mathtools.py +997 -127
- psychopy/tools/monitorunittools.py +7 -1
- psychopy/tools/movietools.py +1 -2
- psychopy/tools/pkgtools.py +157 -127
- psychopy/tools/plottools.py +1 -1
- psychopy/tools/rifttools.py +1 -1
- psychopy/tools/stereotools.py +1 -1
- psychopy/tools/stimulustools.py +172 -2
- psychopy/tools/stringtools.py +22 -2
- psychopy/tools/systemtools.py +1 -1
- psychopy/tools/typetools.py +1 -1
- psychopy/tools/unittools.py +1 -1
- psychopy/tools/versionchooser.py +3 -1
- psychopy/tools/viewtools.py +54 -70
- psychopy/tools/wizard.py +2 -2
- psychopy/validation/__init__.py +6 -0
- psychopy/validation/audio.py +74 -0
- psychopy/validation/visual.py +115 -0
- psychopy/visual/__init__.py +1 -4
- psychopy/visual/aperture.py +9 -6
- psychopy/visual/backends/__init__.py +1 -1
- psychopy/visual/backends/_base.py +1 -1
- psychopy/visual/backends/gamma.py +1 -1
- psychopy/visual/backends/glfwbackend.py +8 -12
- psychopy/visual/backends/pygamebackend.py +1 -1
- psychopy/visual/backends/pygletbackend.py +32 -11
- psychopy/visual/basevisual.py +93 -13
- psychopy/visual/brush.py +1 -1
- psychopy/visual/bufferimage.py +90 -10
- psychopy/visual/button.py +1 -1
- psychopy/visual/circle.py +12 -20
- psychopy/visual/custommouse.py +1 -1
- psychopy/visual/dot.py +80 -14
- psychopy/visual/elementarray.py +84 -10
- psychopy/visual/filters.py +1 -1
- psychopy/visual/form.py +43 -28
- psychopy/visual/grating.py +105 -25
- psychopy/visual/helpers.py +1 -1
- psychopy/visual/image.py +98 -20
- psychopy/visual/line.py +15 -25
- psychopy/visual/movie.py +1 -1
- psychopy/visual/movie2.py +4 -3
- psychopy/visual/movie3.py +4 -3
- psychopy/visual/movies/__init__.py +1 -1
- psychopy/visual/movies/frame.py +1 -1
- psychopy/visual/movies/metadata.py +1 -1
- psychopy/visual/movies/players/__init__.py +1 -1
- psychopy/visual/movies/players/_base.py +1 -1
- psychopy/visual/movies/players/ffpyplayer_player.py +2 -3
- psychopy/visual/nnlvs.py +9 -6
- psychopy/visual/noise.py +4 -16
- psychopy/visual/patch.py +4 -3
- psychopy/visual/pie.py +3 -14
- psychopy/visual/polygon.py +21 -28
- psychopy/visual/radial.py +4 -18
- psychopy/visual/ratingscale.py +4 -3
- psychopy/visual/rect.py +16 -25
- psychopy/visual/rift.py +8 -2
- psychopy/visual/secondorder.py +4 -16
- psychopy/visual/shaders.py +620 -286
- psychopy/visual/shape.py +281 -90
- psychopy/visual/simpleimage.py +1 -1
- psychopy/visual/slider.py +78 -25
- psychopy/visual/stim3d.py +5 -608
- psychopy/visual/text.py +13 -3
- psychopy/visual/textbox2/textbox2.py +188 -56
- psychopy/visual/vlcmoviestim.py +1 -1
- psychopy/visual/window.py +373 -200
- psychopy/web.py +1 -1
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.0.dist-info}/METADATA +9 -9
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.0.dist-info}/RECORD +644 -621
- psychopy/.DS_Store +0 -0
- psychopy/__init__.py.orig +0 -65
- psychopy/app/.DS_Store +0 -0
- psychopy/app/Resources/.DS_Store +0 -0
- psychopy/app/Resources/classic/filecsv16.png +0 -0
- psychopy/app/Resources/classic/fileimage16.png +0 -0
- psychopy/app/Resources/classic/fileunknown16.png +0 -0
- psychopy/app/Resources/dark/filecsv16.png +0 -0
- psychopy/app/Resources/dark/filecsv16@2x.png +0 -0
- psychopy/app/Resources/dark/fileimage16.png +0 -0
- psychopy/app/Resources/dark/fileimage16@2x.png +0 -0
- psychopy/app/Resources/dark/fileunknown16.png +0 -0
- psychopy/app/Resources/dark/fileunknown16@2x.png +0 -0
- psychopy/app/Resources/fonts/OpenSans-Bold.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-BoldItalic.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-ExtraBold.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-Italic.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-Light.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-LightItalic.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-Regular.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-SemiBold.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-SemiBoldItalic.ttf +0 -0
- psychopy/app/Resources/light/filecsv16.png +0 -0
- psychopy/app/Resources/light/filecsv16@2x.png +0 -0
- psychopy/app/Resources/light/fileimage16.png +0 -0
- psychopy/app/Resources/light/fileimage16@2x.png +0 -0
- psychopy/app/Resources/light/fileunknown16.png +0 -0
- psychopy/app/Resources/light/fileunknown16@2x.png +0 -0
- psychopy/app/Resources/psychopySplash.png +0 -0
- psychopy/app/Resources/psychopySplash@2x.png +0 -0
- psychopy/app/builder/builder.py.orig +0 -3932
- psychopy/app/builder/dialogs/__init__.py.orig +0 -1679
- psychopy/app/builder/dialogs/paramCtrls.py.orig +0 -713
- psychopy/app/colorpicker/__init__.py.orig +0 -411
- psychopy/app/locale/ar_001/.DS_Store +0 -0
- psychopy/app/locale/ar_001/LC_MESSAGE/.DS_Store +0 -0
- psychopy/core.py.orig +0 -169
- psychopy/demos/builder/.DS_Store +0 -0
- psychopy/demos/builder/Design Templates/randomisedBlocks/randomisedBlocks_lastrun.py +0 -330
- psychopy/demos/builder/Experiments/.DS_Store +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/archived_conditions.xlsx +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/draw grid stim.py +0 -61
- psychopy/demos/builder/Experiments/dragAndDrop/shapeMaker.psyexp +0 -91
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_1.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_10.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_2.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_3.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_4.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_5.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_6.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_7.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_8.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_9.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/updated_conditions.xlsx +0 -0
- psychopy/demos/builder/Tools/.DS_Store +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/.DS_Store +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/data/.DS_Store +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/data/_gamma_correction_visual_2022-05-18_14h18.29.439.csv +0 -38
- psychopy/demos/builder/Tools/gammaCalibration/data/_gamma_correction_visual_2022-05-18_14h18.29.439.log +0 -3418
- psychopy/demos/builder/Tools/gammaCalibration/data/_gamma_correction_visual_2022-05-18_14h18.29.439.psydat +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/data/x1_gamma_correction_visual_2022-05-17_13h59.42.928.csv +0 -2
- psychopy/demos/builder/Tools/gammaCalibration/data/x1_gamma_correction_visual_2022-05-17_13h59.42.928.log +0 -15
- psychopy/demos/builder/Tools/gammaCalibration/data/x1_gamma_correction_visual_2022-05-17_13h59.42.928.psydat +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/gamma_correction_visual_lastrun.py +0 -562
- psychopy/demos/coder/.DS_Store +0 -0
- psychopy/demos/coder/experiment control/info_gamma.pickle +0 -0
- psychopy/demos/coder/iohub/.iohpid +0 -1
- psychopy/demos/coder/iohub/eyetracking/.iohpid +0 -1
- psychopy/demos/coder/iohub/wintab/.DS_Store +0 -0
- psychopy/demos/coder/stimuli/.DS_Store +0 -0
- psychopy/experiment/_experiment.py.orig +0 -1032
- psychopy/experiment/components/.DS_Store +0 -0
- psychopy/experiment/components/_base.py.orig +0 -823
- psychopy/experiment/components/form/.DS_Store +0 -0
- psychopy/experiment/components/microphone/__init__.py.orig +0 -490
- psychopy/experiment/components/settings/__init__.py.orig +0 -1337
- psychopy/experiment/components/textbox/__init__.py.orig +0 -310
- psychopy/experiment/components/webcam/.DS_Store +0 -0
- psychopy/experiment/components/webcam/light/.DS_Store +0 -0
- psychopy/experiment/loops.py.orig +0 -829
- psychopy/experiment/params.py.orig +0 -408
- psychopy/experiment/routine.py.orig +0 -503
- psychopy/experiment/routines/photodiodeValidator/classic/photodiode_validator.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/classic/photodiode_validator@2x.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/dark/photodiode_validator.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/dark/photodiode_validator@2x.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/light/photodiode_validator.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/light/photodiode_validator@2x.png +0 -0
- psychopy/hardware/.DS_Store +0 -0
- psychopy/hardware/brainproducts.py.orig +0 -680
- psychopy/hardware/iolab.py.orig +0 -238
- psychopy/iohub/datastore/__init__.py.orig +0 -443
- psychopy/iohub/datastore/util.py.orig +0 -692
- psychopy/iohub/devices/mouse/darwin.py.orig +0 -427
- psychopy/iohub/devices/mouse/linux2.py.orig +0 -198
- psychopy/preferences/.DS_Store +0 -0
- psychopy/projects/pavlovia.py.orig +0 -1295
- psychopy/tests/.DS_Store +0 -0
- psychopy/tests/data/.DS_Store +0 -0
- psychopy/tests/data/TestCircle_fill_local.png +0 -0
- psychopy/tests/data/aperture1_normHexbackground_local.png +0 -0
- psychopy/tests/data/aperture1_norm_local.png +0 -0
- psychopy/tests/data/aperture2_normHexbackground_local.png +0 -0
- psychopy/tests/data/beatandrcos_height_local.png +0 -0
- psychopy/tests/data/beatandrcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/beatandrcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/beatandrcos_norm_local.png +0 -0
- psychopy/tests/data/beatandrcos_stencil_local.png +0 -0
- psychopy/tests/data/blend_add_height_local.png +0 -0
- psychopy/tests/data/blend_add_normAddBlend_local.png +0 -0
- psychopy/tests/data/blend_add_normHexbackground_local.png +0 -0
- psychopy/tests/data/blend_add_normNoShade_local.png +0 -0
- psychopy/tests/data/blend_add_norm_local.png +0 -0
- psychopy/tests/data/blend_add_stencil_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_height_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_normAddBlend_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_normHexbackground_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_normNoShade_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_norm_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_stencil_local.png +0 -0
- psychopy/tests/data/circleHex_height_local.png +0 -0
- psychopy/tests/data/circleHex_normAddBlend_local.png +0 -0
- psychopy/tests/data/circleHex_normHexbackground_local.png +0 -0
- psychopy/tests/data/circleHex_normNoShade_local.png +0 -0
- psychopy/tests/data/circleHex_norm_local.png +0 -0
- psychopy/tests/data/circleHex_stencil_local.png +0 -0
- psychopy/tests/data/color_comparison_local.png +0 -0
- psychopy/tests/data/correctScript/.DS_Store +0 -0
- psychopy/tests/data/dots_height_local.png +0 -0
- psychopy/tests/data/dots_normAddBlend_local.png +0 -0
- psychopy/tests/data/dots_normHexbackground_local.png +0 -0
- psychopy/tests/data/dots_normNoShade_local.png +0 -0
- psychopy/tests/data/dots_norm_local.png +0 -0
- psychopy/tests/data/dots_stencil_local.png +0 -0
- psychopy/tests/data/elarray1_height_local.png +0 -0
- psychopy/tests/data/elarray1_normAddBlend_local.png +0 -0
- psychopy/tests/data/elarray1_normHexbackground_local.png +0 -0
- psychopy/tests/data/elarray1_norm_local.png +0 -0
- psychopy/tests/data/elarray1_stencil_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_height_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_norm_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_stencil_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_height_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_norm_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_stencil_local.png +0 -0
- psychopy/tests/data/gabor1_height_local.png +0 -0
- psychopy/tests/data/gabor1_normAddBlend_local.png +0 -0
- psychopy/tests/data/gabor1_normHexbackground_local.png +0 -0
- psychopy/tests/data/gabor1_normNoShade_local.png +0 -0
- psychopy/tests/data/gabor1_norm_local.png +0 -0
- psychopy/tests/data/gabor1_stencil_local.png +0 -0
- psychopy/tests/data/greyscale_normHexbackground_local.png +0 -0
- psychopy/tests/data/imageAndGauss_height_local.png +0 -0
- psychopy/tests/data/imageAndGauss_normAddBlend_local.png +0 -0
- psychopy/tests/data/imageAndGauss_normHexbackground_local.png +0 -0
- psychopy/tests/data/imageAndGauss_normNoShade_local.png +0 -0
- psychopy/tests/data/imageAndGauss_norm_local.png +0 -0
- psychopy/tests/data/imageAndGauss_stencil_local.png +0 -0
- psychopy/tests/data/movFrame1_stencil_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_height_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_normNoShade_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_norm_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_stencil_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_height_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_normNoShade_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_norm_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_stencil_local.png +0 -0
- psychopy/tests/data/numpyImage_height_local.png +0 -0
- psychopy/tests/data/numpyImage_normAddBlend_local.png +0 -0
- psychopy/tests/data/numpyImage_normHexbackground_local.png +0 -0
- psychopy/tests/data/numpyImage_normNoShade_local.png +0 -0
- psychopy/tests/data/numpyImage_norm_local.png +0 -0
- psychopy/tests/data/numpyImage_stencil_local.png +0 -0
- psychopy/tests/data/shape2_1_normAddBlend_local.png +0 -0
- psychopy/tests/data/shape2_1_normHexbackground_local.png +0 -0
- psychopy/tests/data/shape2_1_normNoShade_local.png +0 -0
- psychopy/tests/data/shape2_1_norm_local.png +0 -0
- psychopy/tests/data/shape2_1_stencil_local.png +0 -0
- psychopy/tests/data/text1_height_local.png +0 -0
- psychopy/tests/data/text1_normAddBlend_local.png +0 -0
- psychopy/tests/data/text1_normHexbackground_local.png +0 -0
- psychopy/tests/data/text1_norm_local.png +0 -0
- psychopy/tests/data/text1_stencil_local.png +0 -0
- psychopy/tests/data/wedge1_height_local.png +0 -0
- psychopy/tests/data/wedge1_normAddBlend_local.png +0 -0
- psychopy/tests/data/wedge1_normHexbackground_local.png +0 -0
- psychopy/tests/data/wedge1_normNoShade_local.png +0 -0
- psychopy/tests/data/wedge1_norm_local.png +0 -0
- psychopy/tests/data/wedge1_stencil_local.png +0 -0
- psychopy/tests/test_app/.DS_Store +0 -0
- psychopy/tests/test_app/test_builder/.DS_Store +0 -0
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.log +0 -177
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.psydat +0 -0
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.xlsx +0 -0
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.log +0 -168
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.psydat +0 -0
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.xlsx +0 -0
- psychopy/tests/test_data/.DS_Store +0 -0
- psychopy/tests/test_hardware/test_CRS_BitsSharp.py +0 -67
- psychopy/tests/test_hardware/test_CRS_BitsSharp.py.orig +0 -68
- psychopy/tests/test_hardware/test_CRS_bitsShaders.py +0 -110
- psychopy/tests/test_visual/test_image.py.orig +0 -219
- psychopy/visual/basevisual.py.orig +0 -1723
- psychopy/visual/form.py.orig +0 -1181
- psychopy/visual/text.py.orig +0 -752
- psychopy/visual/textbox2/textbox2.py.orig +0 -1315
- psychopy/visual/windowwarp.py.orig +0 -463
- /psychopy/{app/cortex.log → alerts/alertsCatalogue/3600.yaml} +0 -0
- /psychopy/{app/Resources → assets}/fonts/Arvo-Bold.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/Arvo-BoldItalic.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/Arvo-Italic.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/Arvo-Regular.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/DejaVuSerif.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/IndieFlower-Regular.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/JetBrainsMono-Italic-VariableFont_wght.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/JetBrainsMono-VariableFont_wght.ttf +0 -0
- /psychopy/demos/builder/Experiments/{GoNoGo → goNoGo}/readme.md +0 -0
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.0.dist-info}/WHEEL +0 -0
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.0.dist-info}/entry_points.txt +0 -0
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.0.dist-info}/licenses/LICENSE +0 -0
|
Binary file
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
3.0784 WARNING /Users/lpzjwp/.psychopy3/fonts/Consolas.truetype doesn't have valid font family name
|
|
2
|
-
3.1771 WARNING /Users/lpzjwp/.psychopy3/fonts/Consolas.truetype doesn't have valid font family name
|
|
3
|
-
8.8718 EXP Created window1 = Window(allowGUI=False, allowStencil=False, autoLog=True, backendConf=UNKNOWN, bitsMode=UNKNOWN, blendMode='avg', bpc=(8, 8, 8), color=array([0, 0, 0]), colorSpace='rgb', depthBits=8, fullscr=<method-wrapper '__getattribute__' of attributeSetter object at 0x7fde5b101c70>, gamma=None, gammaErrorPolicy='raise', lms=UNKNOWN, monitor=<psychopy.monitors.calibTools.Monitor object at 0x7fde5b1bbc40>, multiSample=False, name='window1', numSamples=2, pos=[360.0, 225.0], screen=0, size=array([2880, 1800]), stencilBits=0, stereo=False, units='height', useFBO=True, useRetina=True, viewOri=0.0, viewPos=None, viewScale=None, waitBlanking=True, winType='pyglet')
|
|
4
|
-
8.8719 EXP window1: mouseVisible = True
|
|
5
|
-
8.8719 EXP window1: Attempting to measure frame rate of screen (0) ...
|
|
6
|
-
8.8719 EXP window1: recordFrameIntervals = False
|
|
7
|
-
9.0383 EXP window1: recordFrameIntervals = True
|
|
8
|
-
9.2223 EXP Screen (0) actual frame rate measured at 60.12Hz
|
|
9
|
-
9.2223 EXP window1: recordFrameIntervals = False
|
|
10
|
-
12.0401 EXP Created luminance_000 = GratingStim(__class__=<class 'psychopy.visual.grating.GratingStim'>, anchor='center', autoDraw=False, autoLog=True, blendmode='avg', color=array([1., 1., 1.]), colorSpace='rgb', contrast=1.0, depth=0.0, interpolate=True, mask=None, maskParams=None, name='luminance_000', opacity=1.0, ori=1.0, phase=array([0., 0.]), pos=array([0., 0.]), rgbPedestal=array([0., 0., 0.]), sf=array([5., 5.]), size=array([0.5, 0.5]), tex='resources/low_contrast.png', texRes=256.0, units='height', win=Window(...))
|
|
11
|
-
12.0444 EXP Created second_ord_025 = GratingStim(__class__=<class 'psychopy.visual.grating.GratingStim'>, anchor='center', autoDraw=False, autoLog=True, blendmode='avg', color=array([1., 1., 1.]), colorSpace='rgb', contrast=1.0, depth=-1.0, interpolate=True, mask=None, maskParams=None, name='second_ord_025', opacity=1.0, ori=1.0, phase=array([0.25, 0.25]), pos=array([0., 0.]), rgbPedestal=array([0., 0., 0.]), sf=array([5., 5.]), size=array([0.5, 0.5]), tex='resources/second_order_tex.png', texRes=256.0, units='height', win=Window(...))
|
|
12
|
-
12.0475 EXP Created luminance_050 = GratingStim(__class__=<class 'psychopy.visual.grating.GratingStim'>, anchor='center', autoDraw=False, autoLog=True, blendmode='avg', color=array([1., 1., 1.]), colorSpace='rgb', contrast=1.0, depth=-2.0, interpolate=True, mask=None, maskParams=None, name='luminance_050', opacity=1.0, ori=1.0, phase=array([0.5, 0.5]), pos=array([0., 0.]), rgbPedestal=array([0., 0., 0.]), sf=array([5., 5.]), size=array([0.5, 0.5]), tex='resources/low_contrast.png', texRes=256.0, units='height', win=Window(...))
|
|
13
|
-
12.0513 EXP Created second_ord_075 = GratingStim(__class__=<class 'psychopy.visual.grating.GratingStim'>, anchor='center', autoDraw=False, autoLog=True, blendmode='avg', color=array([1., 1., 1.]), colorSpace='rgb', contrast=1.0, depth=-3.0, interpolate=True, mask=None, maskParams=None, name='second_ord_075', opacity=1.0, ori=1.0, phase=array([0.75, 0.75]), pos=array([0., 0.]), rgbPedestal=array([0., 0., 0.]), sf=array([5., 5.]), size=array([0.5, 0.5]), tex='resources/second_order_tex.png', texRes=256.0, units='height', win=Window(...))
|
|
14
|
-
12.0644 EXP Imported questStairs.xlsx as conditions, 2 conditions, 3 params
|
|
15
|
-
12.2086 EXP window1: mouseVisible = True
|
|
Binary file
|
|
@@ -1,562 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
"""
|
|
4
|
-
This experiment was created using PsychoPy3 Experiment Builder (v2022.2.0dev3),
|
|
5
|
-
on Wed May 18 14:18:19 2022
|
|
6
|
-
If you publish work using this script the most relevant publication is:
|
|
7
|
-
|
|
8
|
-
Peirce J, Gray JR, Simpson S, MacAskill M, Höchenberger R, Sogo H, Kastman E, Lindeløv JK. (2019)
|
|
9
|
-
PsychoPy2: Experiments in behavior made easy Behav Res 51: 195.
|
|
10
|
-
https://doi.org/10.3758/s13428-018-01193-y
|
|
11
|
-
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
from psychopy import locale_setup
|
|
15
|
-
from psychopy import prefs
|
|
16
|
-
from psychopy import sound, gui, visual, core, data, event, logging, clock, colors, layout
|
|
17
|
-
from psychopy.constants import (NOT_STARTED, STARTED, PLAYING, PAUSED,
|
|
18
|
-
STOPPED, FINISHED, PRESSED, RELEASED, FOREVER)
|
|
19
|
-
|
|
20
|
-
import numpy as np # whole numpy lib is available, prepend 'np.'
|
|
21
|
-
from numpy import (sin, cos, tan, log, log10, pi, average,
|
|
22
|
-
sqrt, std, deg2rad, rad2deg, linspace, asarray)
|
|
23
|
-
from numpy.random import random, randint, normal, shuffle, choice as randchoice
|
|
24
|
-
import os # handy system and path functions
|
|
25
|
-
import sys # to get file system encoding
|
|
26
|
-
|
|
27
|
-
import psychopy.iohub as io
|
|
28
|
-
from psychopy.hardware import keyboard
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
# Ensure that relative paths start from the same directory as this script
|
|
33
|
-
_thisDir = os.path.dirname(os.path.abspath(__file__))
|
|
34
|
-
os.chdir(_thisDir)
|
|
35
|
-
# Store info about the experiment session
|
|
36
|
-
psychopyVersion = '2022.2.0dev3'
|
|
37
|
-
expName = 'gamma_correction_visual' # from the Builder filename that created this script
|
|
38
|
-
expInfo = {'participant': '', 'session': '001'}
|
|
39
|
-
dlg = gui.DlgFromDict(dictionary=expInfo, sortKeys=False, title=expName)
|
|
40
|
-
if dlg.OK == False:
|
|
41
|
-
core.quit() # user pressed cancel
|
|
42
|
-
expInfo['date'] = data.getDateStr() # add a simple timestamp
|
|
43
|
-
expInfo['expName'] = expName
|
|
44
|
-
expInfo['psychopyVersion'] = psychopyVersion
|
|
45
|
-
|
|
46
|
-
# Data file name stem = absolute path + name; later add .psyexp, .csv, .log, etc
|
|
47
|
-
filename = _thisDir + os.sep + u'data/%s_%s_%s' % (expInfo['participant'], expName, expInfo['date'])
|
|
48
|
-
|
|
49
|
-
# An ExperimentHandler isn't essential but helps with data saving
|
|
50
|
-
thisExp = data.ExperimentHandler(name=expName, version='',
|
|
51
|
-
extraInfo=expInfo, runtimeInfo=None,
|
|
52
|
-
originPath='/Users/lpzjwp/code/psychopy/git/psychopy/demos/builder/Tools/gammaCorrection/gamma_correction_visual_lastrun.py',
|
|
53
|
-
savePickle=True, saveWideText=True,
|
|
54
|
-
dataFileName=filename)
|
|
55
|
-
# save a log file for detail verbose info
|
|
56
|
-
logFile = logging.LogFile(filename+'.log', level=logging.EXP)
|
|
57
|
-
logging.console.setLevel(logging.WARNING) # this outputs to the screen, not a file
|
|
58
|
-
|
|
59
|
-
endExpNow = False # flag for 'escape' or other condition => quit the exp
|
|
60
|
-
frameTolerance = 0.001 # how close to onset before 'same' frame
|
|
61
|
-
|
|
62
|
-
# Start Code - component code to be run after the window creation
|
|
63
|
-
|
|
64
|
-
# Setup the Window
|
|
65
|
-
win = visual.Window(
|
|
66
|
-
size=[1440, 900], fullscr=True, screen=0,
|
|
67
|
-
winType='pyglet', allowGUI=False, allowStencil=False,
|
|
68
|
-
monitor='testMonitor', color=[0,0,0], colorSpace='rgb',
|
|
69
|
-
blendMode='avg', useFBO=True,
|
|
70
|
-
units='height')
|
|
71
|
-
# store frame rate of monitor if we can measure it
|
|
72
|
-
expInfo['frameRate'] = win.getActualFrameRate()
|
|
73
|
-
if expInfo['frameRate'] != None:
|
|
74
|
-
frameDur = 1.0 / round(expInfo['frameRate'])
|
|
75
|
-
else:
|
|
76
|
-
frameDur = 1.0 / 60.0 # could not measure, so guess
|
|
77
|
-
# Setup ioHub
|
|
78
|
-
ioConfig = {}
|
|
79
|
-
|
|
80
|
-
# Setup iohub keyboard
|
|
81
|
-
ioConfig['Keyboard'] = dict(use_keymap='psychopy')
|
|
82
|
-
|
|
83
|
-
ioSession = '1'
|
|
84
|
-
if 'session' in expInfo:
|
|
85
|
-
ioSession = str(expInfo['session'])
|
|
86
|
-
ioServer = io.launchHubServer(window=win, **ioConfig)
|
|
87
|
-
eyetracker = None
|
|
88
|
-
|
|
89
|
-
# create a default keyboard (e.g. to check for escape)
|
|
90
|
-
defaultKeyboard = keyboard.Keyboard(backend='iohub')
|
|
91
|
-
|
|
92
|
-
# Initialize components for Routine "setup_trial"
|
|
93
|
-
setup_trialClock = core.Clock()
|
|
94
|
-
# Run 'Begin Experiment' code from set_gamma
|
|
95
|
-
gamma = 1
|
|
96
|
-
|
|
97
|
-
# Initialize components for Routine "frames"
|
|
98
|
-
framesClock = core.Clock()
|
|
99
|
-
luminance_000 = visual.GratingStim(
|
|
100
|
-
win=win, name='luminance_000',units='height',
|
|
101
|
-
tex='resources/low_contrast.png', mask=None, anchor='center',
|
|
102
|
-
ori=1.0, pos=(0, 0), size=(0.5,0.5), sf=5.0, phase=0.0,
|
|
103
|
-
color=[1,1,1], colorSpace='rgb',
|
|
104
|
-
opacity=1.0, contrast=1.0, blendmode='avg',
|
|
105
|
-
texRes=256.0, interpolate=True, depth=0.0)
|
|
106
|
-
second_ord_025 = visual.GratingStim(
|
|
107
|
-
win=win, name='second_ord_025',units='height',
|
|
108
|
-
tex='resources/second_order_tex.png', mask=None, anchor='center',
|
|
109
|
-
ori=1.0, pos=(0, 0), size=(0.5,0.5), sf=5.0, phase=0.25,
|
|
110
|
-
color=[1,1,1], colorSpace='rgb',
|
|
111
|
-
opacity=1.0, contrast=1.0, blendmode='avg',
|
|
112
|
-
texRes=256.0, interpolate=True, depth=-1.0)
|
|
113
|
-
luminance_050 = visual.GratingStim(
|
|
114
|
-
win=win, name='luminance_050',units='height',
|
|
115
|
-
tex='resources/low_contrast.png', mask=None, anchor='center',
|
|
116
|
-
ori=1.0, pos=(0, 0), size=(0.5,0.5), sf=5.0, phase=0.5,
|
|
117
|
-
color=[1,1,1], colorSpace='rgb',
|
|
118
|
-
opacity=1.0, contrast=1.0, blendmode='avg',
|
|
119
|
-
texRes=256.0, interpolate=True, depth=-2.0)
|
|
120
|
-
second_ord_075 = visual.GratingStim(
|
|
121
|
-
win=win, name='second_ord_075',units='height',
|
|
122
|
-
tex='resources/second_order_tex.png', mask=None, anchor='center',
|
|
123
|
-
ori=1.0, pos=(0, 0), size=(0.5,0.5), sf=5.0, phase=0.75,
|
|
124
|
-
color=[1,1,1], colorSpace='rgb',
|
|
125
|
-
opacity=1.0, contrast=1.0, blendmode='avg',
|
|
126
|
-
texRes=256.0, interpolate=True, depth=-3.0)
|
|
127
|
-
|
|
128
|
-
# Initialize components for Routine "response"
|
|
129
|
-
responseClock = core.Clock()
|
|
130
|
-
resp = keyboard.Keyboard()
|
|
131
|
-
|
|
132
|
-
# Initialize components for Routine "feedback"
|
|
133
|
-
feedbackClock = core.Clock()
|
|
134
|
-
show_feedbk = visual.TextBox2(
|
|
135
|
-
win, text='', font='Open Sans',
|
|
136
|
-
pos=(0, 0), letterHeight=0.05,
|
|
137
|
-
size=(None, None), borderWidth=2.0,
|
|
138
|
-
color='white', colorSpace='rgb',
|
|
139
|
-
opacity=None,
|
|
140
|
-
bold=False, italic=False,
|
|
141
|
-
lineSpacing=1.0,
|
|
142
|
-
padding=0.0, alignment='center',
|
|
143
|
-
anchor='center',
|
|
144
|
-
fillColor=None, borderColor=None,
|
|
145
|
-
flipHoriz=False, flipVert=False, languageStyle='LTR',
|
|
146
|
-
editable=False,
|
|
147
|
-
name='show_feedbk',
|
|
148
|
-
autoLog=True,
|
|
149
|
-
)
|
|
150
|
-
|
|
151
|
-
# Create some handy timers
|
|
152
|
-
globalClock = core.Clock() # to track the time since experiment started
|
|
153
|
-
routineTimer = core.CountdownTimer() # to track time remaining of each (non-slip) routine
|
|
154
|
-
|
|
155
|
-
# set up handler to look after randomisation of trials etc
|
|
156
|
-
conditions = data.importConditions('questStairs.xlsx')
|
|
157
|
-
trials = data.MultiStairHandler(stairType='QUEST', name='trials',
|
|
158
|
-
nTrials=30.0,
|
|
159
|
-
conditions=conditions,
|
|
160
|
-
method='random',
|
|
161
|
-
originPath=-1)
|
|
162
|
-
thisExp.addLoop(trials) # add the loop to the experiment
|
|
163
|
-
# initialise values for first condition
|
|
164
|
-
level = trials._nextIntensity # initialise some vals
|
|
165
|
-
condition = trials.currentStaircase.condition
|
|
166
|
-
|
|
167
|
-
for level, condition in trials:
|
|
168
|
-
currentLoop = trials
|
|
169
|
-
# abbreviate parameter names if possible (e.g. rgb=condition.rgb)
|
|
170
|
-
for paramName in condition:
|
|
171
|
-
exec(paramName + '= condition[paramName]')
|
|
172
|
-
|
|
173
|
-
# ------Prepare to start Routine "setup_trial"-------
|
|
174
|
-
continueRoutine = True
|
|
175
|
-
# update component parameters for each repeat
|
|
176
|
-
# Run 'Begin Routine' code from set_gamma
|
|
177
|
-
gamma = level # from staircase
|
|
178
|
-
trials.addOtherData('gamma', level)
|
|
179
|
-
|
|
180
|
-
win.gamma = level
|
|
181
|
-
# Run 'Begin Routine' code from rand_side
|
|
182
|
-
# randomize whether "high gamma" is right or left
|
|
183
|
-
# "high" is where the grating appears to drift if
|
|
184
|
-
# the gamma is too high. Count as "correct" so
|
|
185
|
-
# that next level will reduce.
|
|
186
|
-
if random() > 0.5:
|
|
187
|
-
ori = 180
|
|
188
|
-
high_ans = 'right'
|
|
189
|
-
else:
|
|
190
|
-
ori = 0
|
|
191
|
-
high_ans = 'left'
|
|
192
|
-
# keep track of which components have finished
|
|
193
|
-
setup_trialComponents = []
|
|
194
|
-
for thisComponent in setup_trialComponents:
|
|
195
|
-
thisComponent.tStart = None
|
|
196
|
-
thisComponent.tStop = None
|
|
197
|
-
thisComponent.tStartRefresh = None
|
|
198
|
-
thisComponent.tStopRefresh = None
|
|
199
|
-
if hasattr(thisComponent, 'status'):
|
|
200
|
-
thisComponent.status = NOT_STARTED
|
|
201
|
-
# reset timers
|
|
202
|
-
t = 0
|
|
203
|
-
_timeToFirstFrame = win.getFutureFlipTime(clock="now")
|
|
204
|
-
setup_trialClock.reset(-_timeToFirstFrame) # t0 is time of first possible flip
|
|
205
|
-
frameN = -1
|
|
206
|
-
|
|
207
|
-
# -------Run Routine "setup_trial"-------
|
|
208
|
-
while continueRoutine:
|
|
209
|
-
# get current time
|
|
210
|
-
t = setup_trialClock.getTime()
|
|
211
|
-
tThisFlip = win.getFutureFlipTime(clock=setup_trialClock)
|
|
212
|
-
tThisFlipGlobal = win.getFutureFlipTime(clock=None)
|
|
213
|
-
frameN = frameN + 1 # number of completed frames (so 0 is the first frame)
|
|
214
|
-
# update/draw components on each frame
|
|
215
|
-
|
|
216
|
-
# check for quit (typically the Esc key)
|
|
217
|
-
if endExpNow or defaultKeyboard.getKeys(keyList=["escape"]):
|
|
218
|
-
core.quit()
|
|
219
|
-
|
|
220
|
-
# check if all components have finished
|
|
221
|
-
if not continueRoutine: # a component has requested a forced-end of Routine
|
|
222
|
-
break
|
|
223
|
-
continueRoutine = False # will revert to True if at least one component still running
|
|
224
|
-
for thisComponent in setup_trialComponents:
|
|
225
|
-
if hasattr(thisComponent, "status") and thisComponent.status != FINISHED:
|
|
226
|
-
continueRoutine = True
|
|
227
|
-
break # at least one component has not yet finished
|
|
228
|
-
|
|
229
|
-
# refresh the screen
|
|
230
|
-
if continueRoutine: # don't flip if this routine is over or we'll get a blank screen
|
|
231
|
-
win.flip()
|
|
232
|
-
|
|
233
|
-
# -------Ending Routine "setup_trial"-------
|
|
234
|
-
for thisComponent in setup_trialComponents:
|
|
235
|
-
if hasattr(thisComponent, "setAutoDraw"):
|
|
236
|
-
thisComponent.setAutoDraw(False)
|
|
237
|
-
# the Routine "setup_trial" was not non-slip safe, so reset the non-slip timer
|
|
238
|
-
routineTimer.reset()
|
|
239
|
-
|
|
240
|
-
# set up handler to look after randomisation of conditions etc
|
|
241
|
-
frame_cycles = data.TrialHandler(nReps=5.0, method='sequential',
|
|
242
|
-
extraInfo=expInfo, originPath=-1,
|
|
243
|
-
trialList=[None],
|
|
244
|
-
seed=None, name='frame_cycles')
|
|
245
|
-
thisExp.addLoop(frame_cycles) # add the loop to the experiment
|
|
246
|
-
thisFrame_cycle = frame_cycles.trialList[0] # so we can initialise stimuli with some values
|
|
247
|
-
# abbreviate parameter names if possible (e.g. rgb = thisFrame_cycle.rgb)
|
|
248
|
-
if thisFrame_cycle != None:
|
|
249
|
-
for paramName in thisFrame_cycle:
|
|
250
|
-
exec('{} = thisFrame_cycle[paramName]'.format(paramName))
|
|
251
|
-
|
|
252
|
-
for thisFrame_cycle in frame_cycles:
|
|
253
|
-
currentLoop = frame_cycles
|
|
254
|
-
# abbreviate parameter names if possible (e.g. rgb = thisFrame_cycle.rgb)
|
|
255
|
-
if thisFrame_cycle != None:
|
|
256
|
-
for paramName in thisFrame_cycle:
|
|
257
|
-
exec('{} = thisFrame_cycle[paramName]'.format(paramName))
|
|
258
|
-
|
|
259
|
-
# ------Prepare to start Routine "frames"-------
|
|
260
|
-
continueRoutine = True
|
|
261
|
-
routineTimer.add(0.200000)
|
|
262
|
-
# update component parameters for each repeat
|
|
263
|
-
luminance_000.setOri(ori)
|
|
264
|
-
second_ord_025.setOri(ori)
|
|
265
|
-
luminance_050.setOri(ori)
|
|
266
|
-
second_ord_075.setOri(ori)
|
|
267
|
-
# keep track of which components have finished
|
|
268
|
-
framesComponents = [luminance_000, second_ord_025, luminance_050, second_ord_075]
|
|
269
|
-
for thisComponent in framesComponents:
|
|
270
|
-
thisComponent.tStart = None
|
|
271
|
-
thisComponent.tStop = None
|
|
272
|
-
thisComponent.tStartRefresh = None
|
|
273
|
-
thisComponent.tStopRefresh = None
|
|
274
|
-
if hasattr(thisComponent, 'status'):
|
|
275
|
-
thisComponent.status = NOT_STARTED
|
|
276
|
-
# reset timers
|
|
277
|
-
t = 0
|
|
278
|
-
_timeToFirstFrame = win.getFutureFlipTime(clock="now")
|
|
279
|
-
framesClock.reset(-_timeToFirstFrame) # t0 is time of first possible flip
|
|
280
|
-
frameN = -1
|
|
281
|
-
|
|
282
|
-
# -------Run Routine "frames"-------
|
|
283
|
-
while continueRoutine and routineTimer.getTime() > 0:
|
|
284
|
-
# get current time
|
|
285
|
-
t = framesClock.getTime()
|
|
286
|
-
tThisFlip = win.getFutureFlipTime(clock=framesClock)
|
|
287
|
-
tThisFlipGlobal = win.getFutureFlipTime(clock=None)
|
|
288
|
-
frameN = frameN + 1 # number of completed frames (so 0 is the first frame)
|
|
289
|
-
# update/draw components on each frame
|
|
290
|
-
|
|
291
|
-
# *luminance_000* updates
|
|
292
|
-
if luminance_000.status == NOT_STARTED and tThisFlip >= 0.0-frameTolerance:
|
|
293
|
-
# keep track of start time/frame for later
|
|
294
|
-
luminance_000.frameNStart = frameN # exact frame index
|
|
295
|
-
luminance_000.tStart = t # local t and not account for scr refresh
|
|
296
|
-
luminance_000.tStartRefresh = tThisFlipGlobal # on global time
|
|
297
|
-
win.timeOnFlip(luminance_000, 'tStartRefresh') # time at next scr refresh
|
|
298
|
-
luminance_000.setAutoDraw(True)
|
|
299
|
-
if luminance_000.status == STARTED:
|
|
300
|
-
if frameN >= (luminance_000.frameNStart + 3):
|
|
301
|
-
# keep track of stop time/frame for later
|
|
302
|
-
luminance_000.tStop = t # not accounting for scr refresh
|
|
303
|
-
luminance_000.frameNStop = frameN # exact frame index
|
|
304
|
-
win.timeOnFlip(luminance_000, 'tStopRefresh') # time at next scr refresh
|
|
305
|
-
luminance_000.setAutoDraw(False)
|
|
306
|
-
|
|
307
|
-
# *second_ord_025* updates
|
|
308
|
-
if second_ord_025.status == NOT_STARTED and frameN >= 3:
|
|
309
|
-
# keep track of start time/frame for later
|
|
310
|
-
second_ord_025.frameNStart = frameN # exact frame index
|
|
311
|
-
second_ord_025.tStart = t # local t and not account for scr refresh
|
|
312
|
-
second_ord_025.tStartRefresh = tThisFlipGlobal # on global time
|
|
313
|
-
win.timeOnFlip(second_ord_025, 'tStartRefresh') # time at next scr refresh
|
|
314
|
-
second_ord_025.setAutoDraw(True)
|
|
315
|
-
if second_ord_025.status == STARTED:
|
|
316
|
-
if frameN >= (second_ord_025.frameNStart + 3):
|
|
317
|
-
# keep track of stop time/frame for later
|
|
318
|
-
second_ord_025.tStop = t # not accounting for scr refresh
|
|
319
|
-
second_ord_025.frameNStop = frameN # exact frame index
|
|
320
|
-
win.timeOnFlip(second_ord_025, 'tStopRefresh') # time at next scr refresh
|
|
321
|
-
second_ord_025.setAutoDraw(False)
|
|
322
|
-
|
|
323
|
-
# *luminance_050* updates
|
|
324
|
-
if luminance_050.status == NOT_STARTED and frameN >= 6:
|
|
325
|
-
# keep track of start time/frame for later
|
|
326
|
-
luminance_050.frameNStart = frameN # exact frame index
|
|
327
|
-
luminance_050.tStart = t # local t and not account for scr refresh
|
|
328
|
-
luminance_050.tStartRefresh = tThisFlipGlobal # on global time
|
|
329
|
-
win.timeOnFlip(luminance_050, 'tStartRefresh') # time at next scr refresh
|
|
330
|
-
luminance_050.setAutoDraw(True)
|
|
331
|
-
if luminance_050.status == STARTED:
|
|
332
|
-
if frameN >= (luminance_050.frameNStart + 3):
|
|
333
|
-
# keep track of stop time/frame for later
|
|
334
|
-
luminance_050.tStop = t # not accounting for scr refresh
|
|
335
|
-
luminance_050.frameNStop = frameN # exact frame index
|
|
336
|
-
win.timeOnFlip(luminance_050, 'tStopRefresh') # time at next scr refresh
|
|
337
|
-
luminance_050.setAutoDraw(False)
|
|
338
|
-
|
|
339
|
-
# *second_ord_075* updates
|
|
340
|
-
if second_ord_075.status == NOT_STARTED and frameN >= 9:
|
|
341
|
-
# keep track of start time/frame for later
|
|
342
|
-
second_ord_075.frameNStart = frameN # exact frame index
|
|
343
|
-
second_ord_075.tStart = t # local t and not account for scr refresh
|
|
344
|
-
second_ord_075.tStartRefresh = tThisFlipGlobal # on global time
|
|
345
|
-
win.timeOnFlip(second_ord_075, 'tStartRefresh') # time at next scr refresh
|
|
346
|
-
second_ord_075.setAutoDraw(True)
|
|
347
|
-
if second_ord_075.status == STARTED:
|
|
348
|
-
if frameN >= (second_ord_075.frameNStart + 3):
|
|
349
|
-
# keep track of stop time/frame for later
|
|
350
|
-
second_ord_075.tStop = t # not accounting for scr refresh
|
|
351
|
-
second_ord_075.frameNStop = frameN # exact frame index
|
|
352
|
-
win.timeOnFlip(second_ord_075, 'tStopRefresh') # time at next scr refresh
|
|
353
|
-
second_ord_075.setAutoDraw(False)
|
|
354
|
-
|
|
355
|
-
# check for quit (typically the Esc key)
|
|
356
|
-
if endExpNow or defaultKeyboard.getKeys(keyList=["escape"]):
|
|
357
|
-
core.quit()
|
|
358
|
-
|
|
359
|
-
# check if all components have finished
|
|
360
|
-
if not continueRoutine: # a component has requested a forced-end of Routine
|
|
361
|
-
break
|
|
362
|
-
continueRoutine = False # will revert to True if at least one component still running
|
|
363
|
-
for thisComponent in framesComponents:
|
|
364
|
-
if hasattr(thisComponent, "status") and thisComponent.status != FINISHED:
|
|
365
|
-
continueRoutine = True
|
|
366
|
-
break # at least one component has not yet finished
|
|
367
|
-
|
|
368
|
-
# refresh the screen
|
|
369
|
-
if continueRoutine: # don't flip if this routine is over or we'll get a blank screen
|
|
370
|
-
win.flip()
|
|
371
|
-
|
|
372
|
-
# -------Ending Routine "frames"-------
|
|
373
|
-
for thisComponent in framesComponents:
|
|
374
|
-
if hasattr(thisComponent, "setAutoDraw"):
|
|
375
|
-
thisComponent.setAutoDraw(False)
|
|
376
|
-
# completed 5.0 repeats of 'frame_cycles'
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
# ------Prepare to start Routine "response"-------
|
|
380
|
-
continueRoutine = True
|
|
381
|
-
# update component parameters for each repeat
|
|
382
|
-
resp.keys = []
|
|
383
|
-
resp.rt = []
|
|
384
|
-
_resp_allKeys = []
|
|
385
|
-
# keep track of which components have finished
|
|
386
|
-
responseComponents = [resp]
|
|
387
|
-
for thisComponent in responseComponents:
|
|
388
|
-
thisComponent.tStart = None
|
|
389
|
-
thisComponent.tStop = None
|
|
390
|
-
thisComponent.tStartRefresh = None
|
|
391
|
-
thisComponent.tStopRefresh = None
|
|
392
|
-
if hasattr(thisComponent, 'status'):
|
|
393
|
-
thisComponent.status = NOT_STARTED
|
|
394
|
-
# reset timers
|
|
395
|
-
t = 0
|
|
396
|
-
_timeToFirstFrame = win.getFutureFlipTime(clock="now")
|
|
397
|
-
responseClock.reset(-_timeToFirstFrame) # t0 is time of first possible flip
|
|
398
|
-
frameN = -1
|
|
399
|
-
|
|
400
|
-
# -------Run Routine "response"-------
|
|
401
|
-
while continueRoutine:
|
|
402
|
-
# get current time
|
|
403
|
-
t = responseClock.getTime()
|
|
404
|
-
tThisFlip = win.getFutureFlipTime(clock=responseClock)
|
|
405
|
-
tThisFlipGlobal = win.getFutureFlipTime(clock=None)
|
|
406
|
-
frameN = frameN + 1 # number of completed frames (so 0 is the first frame)
|
|
407
|
-
# update/draw components on each frame
|
|
408
|
-
|
|
409
|
-
# *resp* updates
|
|
410
|
-
waitOnFlip = False
|
|
411
|
-
if resp.status == NOT_STARTED and tThisFlip >= 0.0-frameTolerance:
|
|
412
|
-
# keep track of start time/frame for later
|
|
413
|
-
resp.frameNStart = frameN # exact frame index
|
|
414
|
-
resp.tStart = t # local t and not account for scr refresh
|
|
415
|
-
resp.tStartRefresh = tThisFlipGlobal # on global time
|
|
416
|
-
win.timeOnFlip(resp, 'tStartRefresh') # time at next scr refresh
|
|
417
|
-
resp.status = STARTED
|
|
418
|
-
# keyboard checking is just starting
|
|
419
|
-
waitOnFlip = True
|
|
420
|
-
win.callOnFlip(resp.clock.reset) # t=0 on next screen flip
|
|
421
|
-
if resp.status == STARTED and not waitOnFlip:
|
|
422
|
-
theseKeys = resp.getKeys(keyList=['left','right'], waitRelease=False)
|
|
423
|
-
_resp_allKeys.extend(theseKeys)
|
|
424
|
-
if len(_resp_allKeys):
|
|
425
|
-
resp.keys = _resp_allKeys[-1].name # just the last key pressed
|
|
426
|
-
resp.rt = _resp_allKeys[-1].rt
|
|
427
|
-
# was this correct?
|
|
428
|
-
if (resp.keys == str('right')) or (resp.keys == 'right'):
|
|
429
|
-
resp.corr = 1
|
|
430
|
-
else:
|
|
431
|
-
resp.corr = 0
|
|
432
|
-
# a response ends the routine
|
|
433
|
-
continueRoutine = False
|
|
434
|
-
|
|
435
|
-
# check for quit (typically the Esc key)
|
|
436
|
-
if endExpNow or defaultKeyboard.getKeys(keyList=["escape"]):
|
|
437
|
-
core.quit()
|
|
438
|
-
|
|
439
|
-
# check if all components have finished
|
|
440
|
-
if not continueRoutine: # a component has requested a forced-end of Routine
|
|
441
|
-
break
|
|
442
|
-
continueRoutine = False # will revert to True if at least one component still running
|
|
443
|
-
for thisComponent in responseComponents:
|
|
444
|
-
if hasattr(thisComponent, "status") and thisComponent.status != FINISHED:
|
|
445
|
-
continueRoutine = True
|
|
446
|
-
break # at least one component has not yet finished
|
|
447
|
-
|
|
448
|
-
# refresh the screen
|
|
449
|
-
if continueRoutine: # don't flip if this routine is over or we'll get a blank screen
|
|
450
|
-
win.flip()
|
|
451
|
-
|
|
452
|
-
# -------Ending Routine "response"-------
|
|
453
|
-
for thisComponent in responseComponents:
|
|
454
|
-
if hasattr(thisComponent, "setAutoDraw"):
|
|
455
|
-
thisComponent.setAutoDraw(False)
|
|
456
|
-
# check responses
|
|
457
|
-
if resp.keys in ['', [], None]: # No response was made
|
|
458
|
-
resp.keys = None
|
|
459
|
-
# was no response the correct answer?!
|
|
460
|
-
if str('right').lower() == 'none':
|
|
461
|
-
resp.corr = 1; # correct non-response
|
|
462
|
-
else:
|
|
463
|
-
resp.corr = 0; # failed to respond (incorrectly)
|
|
464
|
-
# store data for trials (MultiStairHandler)
|
|
465
|
-
trials.addResponse(resp.corr, level)
|
|
466
|
-
trials.addOtherData('resp.rt', resp.rt)
|
|
467
|
-
trials.addOtherData('resp.started', resp.tStartRefresh)
|
|
468
|
-
trials.addOtherData('resp.stopped', resp.tStopRefresh)
|
|
469
|
-
# the Routine "response" was not non-slip safe, so reset the non-slip timer
|
|
470
|
-
routineTimer.reset()
|
|
471
|
-
|
|
472
|
-
# ------Prepare to start Routine "feedback"-------
|
|
473
|
-
continueRoutine = True
|
|
474
|
-
routineTimer.add(0.500000)
|
|
475
|
-
# update component parameters for each repeat
|
|
476
|
-
# Run 'Begin Routine' code from make_feedbk
|
|
477
|
-
msg = f"gamma = {level} \nresp:{resp.keys}"
|
|
478
|
-
show_feedbk.reset()
|
|
479
|
-
show_feedbk.setText(msg)
|
|
480
|
-
# keep track of which components have finished
|
|
481
|
-
feedbackComponents = [show_feedbk]
|
|
482
|
-
for thisComponent in feedbackComponents:
|
|
483
|
-
thisComponent.tStart = None
|
|
484
|
-
thisComponent.tStop = None
|
|
485
|
-
thisComponent.tStartRefresh = None
|
|
486
|
-
thisComponent.tStopRefresh = None
|
|
487
|
-
if hasattr(thisComponent, 'status'):
|
|
488
|
-
thisComponent.status = NOT_STARTED
|
|
489
|
-
# reset timers
|
|
490
|
-
t = 0
|
|
491
|
-
_timeToFirstFrame = win.getFutureFlipTime(clock="now")
|
|
492
|
-
feedbackClock.reset(-_timeToFirstFrame) # t0 is time of first possible flip
|
|
493
|
-
frameN = -1
|
|
494
|
-
|
|
495
|
-
# -------Run Routine "feedback"-------
|
|
496
|
-
while continueRoutine and routineTimer.getTime() > 0:
|
|
497
|
-
# get current time
|
|
498
|
-
t = feedbackClock.getTime()
|
|
499
|
-
tThisFlip = win.getFutureFlipTime(clock=feedbackClock)
|
|
500
|
-
tThisFlipGlobal = win.getFutureFlipTime(clock=None)
|
|
501
|
-
frameN = frameN + 1 # number of completed frames (so 0 is the first frame)
|
|
502
|
-
# update/draw components on each frame
|
|
503
|
-
|
|
504
|
-
# *show_feedbk* updates
|
|
505
|
-
if show_feedbk.status == NOT_STARTED and tThisFlip >= 0.0-frameTolerance:
|
|
506
|
-
# keep track of start time/frame for later
|
|
507
|
-
show_feedbk.frameNStart = frameN # exact frame index
|
|
508
|
-
show_feedbk.tStart = t # local t and not account for scr refresh
|
|
509
|
-
show_feedbk.tStartRefresh = tThisFlipGlobal # on global time
|
|
510
|
-
win.timeOnFlip(show_feedbk, 'tStartRefresh') # time at next scr refresh
|
|
511
|
-
show_feedbk.setAutoDraw(True)
|
|
512
|
-
if show_feedbk.status == STARTED:
|
|
513
|
-
# is it time to stop? (based on global clock, using actual start)
|
|
514
|
-
if tThisFlipGlobal > show_feedbk.tStartRefresh + 0.5-frameTolerance:
|
|
515
|
-
# keep track of stop time/frame for later
|
|
516
|
-
show_feedbk.tStop = t # not accounting for scr refresh
|
|
517
|
-
show_feedbk.frameNStop = frameN # exact frame index
|
|
518
|
-
win.timeOnFlip(show_feedbk, 'tStopRefresh') # time at next scr refresh
|
|
519
|
-
show_feedbk.setAutoDraw(False)
|
|
520
|
-
|
|
521
|
-
# check for quit (typically the Esc key)
|
|
522
|
-
if endExpNow or defaultKeyboard.getKeys(keyList=["escape"]):
|
|
523
|
-
core.quit()
|
|
524
|
-
|
|
525
|
-
# check if all components have finished
|
|
526
|
-
if not continueRoutine: # a component has requested a forced-end of Routine
|
|
527
|
-
break
|
|
528
|
-
continueRoutine = False # will revert to True if at least one component still running
|
|
529
|
-
for thisComponent in feedbackComponents:
|
|
530
|
-
if hasattr(thisComponent, "status") and thisComponent.status != FINISHED:
|
|
531
|
-
continueRoutine = True
|
|
532
|
-
break # at least one component has not yet finished
|
|
533
|
-
|
|
534
|
-
# refresh the screen
|
|
535
|
-
if continueRoutine: # don't flip if this routine is over or we'll get a blank screen
|
|
536
|
-
win.flip()
|
|
537
|
-
|
|
538
|
-
# -------Ending Routine "feedback"-------
|
|
539
|
-
for thisComponent in feedbackComponents:
|
|
540
|
-
if hasattr(thisComponent, "setAutoDraw"):
|
|
541
|
-
thisComponent.setAutoDraw(False)
|
|
542
|
-
trials.addOtherData('show_feedbk.started', show_feedbk.tStartRefresh)
|
|
543
|
-
trials.addOtherData('show_feedbk.stopped', show_feedbk.tStopRefresh)
|
|
544
|
-
thisExp.nextEntry()
|
|
545
|
-
|
|
546
|
-
# all staircases completed
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
# Flip one final time so any remaining win.callOnFlip()
|
|
550
|
-
# and win.timeOnFlip() tasks get executed before quitting
|
|
551
|
-
win.flip()
|
|
552
|
-
|
|
553
|
-
# these shouldn't be strictly necessary (should auto-save)
|
|
554
|
-
thisExp.saveAsWideText(filename+'.csv', delim='auto')
|
|
555
|
-
thisExp.saveAsPickle(filename)
|
|
556
|
-
logging.flush()
|
|
557
|
-
# make sure everything is closed down
|
|
558
|
-
if eyetracker:
|
|
559
|
-
eyetracker.setConnectionState(False)
|
|
560
|
-
thisExp.abort() # or data files will save again on exit
|
|
561
|
-
win.close()
|
|
562
|
-
core.quit()
|
psychopy/demos/coder/.DS_Store
DELETED
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ioHub PID: 15069
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ioHub PID: 15097
|
|
Binary file
|
|
Binary file
|