pyelink 1.0.0__tar.gz

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.
Files changed (35) hide show
  1. pyelink-1.0.0/.github/workflows/publish.yml +33 -0
  2. pyelink-1.0.0/.gitignore +62 -0
  3. pyelink-1.0.0/.python-version +1 -0
  4. pyelink-1.0.0/LICENSE +21 -0
  5. pyelink-1.0.0/PKG-INFO +156 -0
  6. pyelink-1.0.0/README.md +120 -0
  7. pyelink-1.0.0/docs/eyelink_commands_checklist.md +293 -0
  8. pyelink-1.0.0/docs/eyelink_commands_reference.md +1507 -0
  9. pyelink-1.0.0/examples/__init__.py +1 -0
  10. pyelink-1.0.0/examples/assets/fixation_target.png +0 -0
  11. pyelink-1.0.0/examples/calibration_only_example.py +33 -0
  12. pyelink-1.0.0/examples/psychopy_minimal_example.py +60 -0
  13. pyelink-1.0.0/examples/pygame_minimal_example.py +61 -0
  14. pyelink-1.0.0/examples/pyglet_minimal_example.py +71 -0
  15. pyelink-1.0.0/pyproject.toml +186 -0
  16. pyelink-1.0.0/resources/Funded_by_EU_Eyes4ICU.png +0 -0
  17. pyelink-1.0.0/src/pyelink/__init__.py +80 -0
  18. pyelink-1.0.0/src/pyelink/audio.py +113 -0
  19. pyelink-1.0.0/src/pyelink/calibration/__init__.py +188 -0
  20. pyelink-1.0.0/src/pyelink/calibration/base.py +350 -0
  21. pyelink-1.0.0/src/pyelink/calibration/psychopy_backend.py +436 -0
  22. pyelink-1.0.0/src/pyelink/calibration/pygame_backend.py +351 -0
  23. pyelink-1.0.0/src/pyelink/calibration/pyglet_backend.py +443 -0
  24. pyelink-1.0.0/src/pyelink/calibration/targets.py +151 -0
  25. pyelink-1.0.0/src/pyelink/core.py +1577 -0
  26. pyelink-1.0.0/src/pyelink/data.py +506 -0
  27. pyelink-1.0.0/src/pyelink/display/__init__.py +14 -0
  28. pyelink-1.0.0/src/pyelink/display/base.py +232 -0
  29. pyelink-1.0.0/src/pyelink/display/psychopy_display.py +176 -0
  30. pyelink-1.0.0/src/pyelink/display/pygame_display.py +190 -0
  31. pyelink-1.0.0/src/pyelink/display/pyglet_display.py +225 -0
  32. pyelink-1.0.0/src/pyelink/events.py +175 -0
  33. pyelink-1.0.0/src/pyelink/settings.py +1036 -0
  34. pyelink-1.0.0/src/pyelink/utils.py +86 -0
  35. pyelink-1.0.0/src/pyelink/version.py +123 -0
@@ -0,0 +1,33 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ deploy:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ with:
14
+ fetch-depth: 0 # Fetch all history for hatch-vcs to determine version from tags
15
+
16
+ - name: Set up Python
17
+ uses: actions/setup-python@v5
18
+ with:
19
+ python-version: '3.11'
20
+
21
+ - name: Install dependencies
22
+ run: |
23
+ python -m pip install --upgrade pip
24
+ pip install build twine
25
+
26
+ - name: Build package
27
+ run: python -m build
28
+
29
+ - name: Publish to PyPI
30
+ env:
31
+ TWINE_USERNAME: __token__
32
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
33
+ run: twine upload dist/*
@@ -0,0 +1,62 @@
1
+ uv.lock
2
+ _tmp/*
3
+ data/*
4
+ # Example data directory
5
+ examples/data/
6
+ *.edf
7
+ *.asc
8
+
9
+ # Python bytecode
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+
15
+ # Virtual environments
16
+ .venv/
17
+ venv/
18
+ ENV/
19
+ env/
20
+
21
+ # Distribution / packaging
22
+ build/
23
+ dist/
24
+ *.egg-info/
25
+ .eggs/
26
+ *.egg
27
+
28
+ # IDEs
29
+ .vscode/
30
+ .idea/
31
+ *.swp
32
+ *.swo
33
+ *~
34
+
35
+ # macOS
36
+ .DS_Store
37
+ .AppleDouble
38
+ .LSOverride
39
+
40
+ # Coverage reports
41
+ htmlcov/
42
+ .coverage
43
+ .coverage.*
44
+ coverage.xml
45
+ *.cover
46
+
47
+ # Testing
48
+ .pytest_cache/
49
+ .tox/
50
+
51
+ # Linting / formatting
52
+ .ruff_cache/
53
+ .mypy_cache/
54
+ .dmypy.json
55
+ dmypy.json
56
+
57
+ # Logs
58
+ *.log
59
+
60
+ # Environment variables
61
+ .env
62
+ .env.local
@@ -0,0 +1 @@
1
+ 3.10
pyelink-1.0.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Mohammadhossein Salari
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
pyelink-1.0.0/PKG-INFO ADDED
@@ -0,0 +1,156 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyelink
3
+ Version: 1.0.0
4
+ Summary: Python wrapper for SR Research EyeLink eye trackers
5
+ Project-URL: Homepage, https://github.com/mh-salari/pyelink
6
+ Project-URL: Documentation, https://github.com/mh-salari/pyelink#readme
7
+ Project-URL: Repository, https://github.com/mh-salari/pyelink
8
+ Project-URL: Issues, https://github.com/mh-salari/pyelink/issues
9
+ Author-email: Mohammadhossein Salari <Mohammadhossein.salari@gmail.com>
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Keywords: eyelink,eyetracking,neuroscience,psychopy,pygame,pyglet
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Scientific/Engineering
21
+ Requires-Python: >=3.9
22
+ Requires-Dist: fixation-target>=1.4.2
23
+ Requires-Dist: numpy<2.3.0,>=1.20.0
24
+ Requires-Dist: pyaudio>=0.2.14
25
+ Requires-Dist: pydantic<3.0,>=2.0
26
+ Provides-Extra: dev
27
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
28
+ Provides-Extra: psychopy
29
+ Requires-Dist: pillow>=8.0.0; extra == 'psychopy'
30
+ Requires-Dist: psychopy>=2023.1.0; (python_version < '3.12') and extra == 'psychopy'
31
+ Provides-Extra: pygame
32
+ Requires-Dist: pygame>=2.6.1; extra == 'pygame'
33
+ Provides-Extra: pyglet
34
+ Requires-Dist: pyglet>=2.1.11; extra == 'pyglet'
35
+ Description-Content-Type: text/markdown
36
+
37
+ # PyeLink
38
+
39
+ Python wrapper for SR Research EyeLink eye trackers.
40
+
41
+ ## Installation
42
+
43
+ **You must specify a backend when installing pyelink.** A simple `pip install pyelink` will NOT work because pyelink requires one of three mutually exclusive display backends (pygame, psychopy, or pyglet).
44
+
45
+ Choose ONE backend:
46
+
47
+ ```bash
48
+ # For Pygame users
49
+ pip install pyelink[pygame]
50
+
51
+ # For PsychoPy users (Python < 3.12 only)
52
+ pip install pyelink[psychopy]
53
+
54
+ # For Pyglet users (pyglet 2.0+)
55
+ pip install pyelink[pyglet]
56
+ ```
57
+
58
+ You'll also need to install pylink separately from SR Research:
59
+ ```bash
60
+ pip install --index-url=https://pypi.sr-support.com sr-research-pylink
61
+ ```
62
+
63
+ **Note:** This codebase has been tested on macOS ARM (Apple Silicon) only.
64
+
65
+ ### ⚠️ Backend Compatibility Warning
66
+
67
+ **You CANNOT install both `psychopy` and `pyglet` backends together.**
68
+
69
+ **Why?** PsychoPy pins `pyglet==1.4.11` (from 2017) as a dependency, while the modern pyglet backend requires `pyglet>=2.0.0`. These versions are incompatible.
70
+
71
+ **Solution:** Choose ONE backend:
72
+ - **Pygame** (recommended): Works everywhere, no conflicts
73
+ - **PsychoPy**: Use if you need PsychoPy features, but cannot use pyglet 2.0+
74
+ - **Pyglet**: Use if you want modern pyglet (2.0+) but don't need PsychoPy
75
+
76
+ ### Platform-Specific Notes
77
+
78
+ **macOS:**
79
+ - PyAudio requires PortAudio. Install it first:
80
+ ```bash
81
+ brew install portaudio
82
+ ```
83
+
84
+ ## Quick Start
85
+
86
+ ```python
87
+ import pyelink as el
88
+
89
+ # Configure tracker with backend
90
+ settings = el.Settings(
91
+ backend='pygame', # or 'psychopy', 'pyglet'
92
+ fullscreen=True,
93
+ screen_width=1920,
94
+ screen_height=1080,
95
+ filename="mydata",
96
+ filepath="./data/",
97
+ )
98
+
99
+ # Tracker creates and owns the window
100
+ tracker = el.EyeLink(settings)
101
+
102
+ # Calibrate (optionally record samples during calibration)
103
+ tracker.calibrate(record_samples=True)
104
+
105
+ # Option A: Direct window access for custom drawing
106
+ tracker.window.fill((128, 128, 128)) # pygame example
107
+ # ... backend-specific drawing ...
108
+ tracker.flip()
109
+
110
+ # Option B: Helper methods for common patterns
111
+ tracker.show_message("Press SPACE to begin")
112
+ tracker.wait_for_key('space')
113
+
114
+ # Run your experiment
115
+ tracker.start_recording()
116
+ # ... show stimuli, collect data ...
117
+ tracker.stop_recording()
118
+
119
+ # Clean up (closes window and saves EDF automatically)
120
+ tracker.end_experiment()
121
+ ```
122
+
123
+ ## Development
124
+
125
+ For development with different backends:
126
+
127
+ ```bash
128
+ # PsychoPy backend
129
+ uv pip uninstall pyelink && uv pip install -e ".[psychopy]" && uv pip install --index-url=https://pypi.sr-support.com sr-research-pylink
130
+
131
+ # Pygame backend
132
+ uv pip uninstall pyelink && uv pip install -e ".[pygame]" && uv pip install --index-url=https://pypi.sr-support.com sr-research-pylink
133
+
134
+ # Pyglet backend
135
+ uv pip uninstall pyelink && uv pip install -e ".[pyglet]" && uv pip install --index-url=https://pypi.sr-support.com sr-research-pylink
136
+ ```
137
+
138
+ ## Attribution
139
+
140
+ This package is based on code originally developed by:
141
+
142
+ - **Marcus Nyström** (Lund University Humanities Lab, Lund, Sweden)
143
+ - Email: marcus.nystrom@humlab.lu.se
144
+
145
+ - **pylinkwrapper** by Nick DiQuattro
146
+ - Repository: https://github.com/ndiquattro/pylinkwrapper
147
+ - Core EyeLink functionality and wrapper architecture
148
+
149
+
150
+ ## Acknowledgments
151
+
152
+ This project has received funding from the European Union's Horizon Europe research and innovation funding program under grant agreement No 101072410, Eyes4ICU project.
153
+
154
+ <p align="center">
155
+ <img src="https://github.com/mh-salari/zarafe/raw/main/resources/Funded_by_EU_Eyes4ICU.png" alt="Funded by EU Eyes4ICU" width="500">
156
+ </p>
@@ -0,0 +1,120 @@
1
+ # PyeLink
2
+
3
+ Python wrapper for SR Research EyeLink eye trackers.
4
+
5
+ ## Installation
6
+
7
+ **You must specify a backend when installing pyelink.** A simple `pip install pyelink` will NOT work because pyelink requires one of three mutually exclusive display backends (pygame, psychopy, or pyglet).
8
+
9
+ Choose ONE backend:
10
+
11
+ ```bash
12
+ # For Pygame users
13
+ pip install pyelink[pygame]
14
+
15
+ # For PsychoPy users (Python < 3.12 only)
16
+ pip install pyelink[psychopy]
17
+
18
+ # For Pyglet users (pyglet 2.0+)
19
+ pip install pyelink[pyglet]
20
+ ```
21
+
22
+ You'll also need to install pylink separately from SR Research:
23
+ ```bash
24
+ pip install --index-url=https://pypi.sr-support.com sr-research-pylink
25
+ ```
26
+
27
+ **Note:** This codebase has been tested on macOS ARM (Apple Silicon) only.
28
+
29
+ ### ⚠️ Backend Compatibility Warning
30
+
31
+ **You CANNOT install both `psychopy` and `pyglet` backends together.**
32
+
33
+ **Why?** PsychoPy pins `pyglet==1.4.11` (from 2017) as a dependency, while the modern pyglet backend requires `pyglet>=2.0.0`. These versions are incompatible.
34
+
35
+ **Solution:** Choose ONE backend:
36
+ - **Pygame** (recommended): Works everywhere, no conflicts
37
+ - **PsychoPy**: Use if you need PsychoPy features, but cannot use pyglet 2.0+
38
+ - **Pyglet**: Use if you want modern pyglet (2.0+) but don't need PsychoPy
39
+
40
+ ### Platform-Specific Notes
41
+
42
+ **macOS:**
43
+ - PyAudio requires PortAudio. Install it first:
44
+ ```bash
45
+ brew install portaudio
46
+ ```
47
+
48
+ ## Quick Start
49
+
50
+ ```python
51
+ import pyelink as el
52
+
53
+ # Configure tracker with backend
54
+ settings = el.Settings(
55
+ backend='pygame', # or 'psychopy', 'pyglet'
56
+ fullscreen=True,
57
+ screen_width=1920,
58
+ screen_height=1080,
59
+ filename="mydata",
60
+ filepath="./data/",
61
+ )
62
+
63
+ # Tracker creates and owns the window
64
+ tracker = el.EyeLink(settings)
65
+
66
+ # Calibrate (optionally record samples during calibration)
67
+ tracker.calibrate(record_samples=True)
68
+
69
+ # Option A: Direct window access for custom drawing
70
+ tracker.window.fill((128, 128, 128)) # pygame example
71
+ # ... backend-specific drawing ...
72
+ tracker.flip()
73
+
74
+ # Option B: Helper methods for common patterns
75
+ tracker.show_message("Press SPACE to begin")
76
+ tracker.wait_for_key('space')
77
+
78
+ # Run your experiment
79
+ tracker.start_recording()
80
+ # ... show stimuli, collect data ...
81
+ tracker.stop_recording()
82
+
83
+ # Clean up (closes window and saves EDF automatically)
84
+ tracker.end_experiment()
85
+ ```
86
+
87
+ ## Development
88
+
89
+ For development with different backends:
90
+
91
+ ```bash
92
+ # PsychoPy backend
93
+ uv pip uninstall pyelink && uv pip install -e ".[psychopy]" && uv pip install --index-url=https://pypi.sr-support.com sr-research-pylink
94
+
95
+ # Pygame backend
96
+ uv pip uninstall pyelink && uv pip install -e ".[pygame]" && uv pip install --index-url=https://pypi.sr-support.com sr-research-pylink
97
+
98
+ # Pyglet backend
99
+ uv pip uninstall pyelink && uv pip install -e ".[pyglet]" && uv pip install --index-url=https://pypi.sr-support.com sr-research-pylink
100
+ ```
101
+
102
+ ## Attribution
103
+
104
+ This package is based on code originally developed by:
105
+
106
+ - **Marcus Nyström** (Lund University Humanities Lab, Lund, Sweden)
107
+ - Email: marcus.nystrom@humlab.lu.se
108
+
109
+ - **pylinkwrapper** by Nick DiQuattro
110
+ - Repository: https://github.com/ndiquattro/pylinkwrapper
111
+ - Core EyeLink functionality and wrapper architecture
112
+
113
+
114
+ ## Acknowledgments
115
+
116
+ This project has received funding from the European Union's Horizon Europe research and innovation funding program under grant agreement No 101072410, Eyes4ICU project.
117
+
118
+ <p align="center">
119
+ <img src="https://github.com/mh-salari/zarafe/raw/main/resources/Funded_by_EU_Eyes4ICU.png" alt="Funded by EU Eyes4ICU" width="500">
120
+ </p>
@@ -0,0 +1,293 @@
1
+ # EyeLink Commands Implementation Status
2
+
3
+ List of commands from eyelink_commands_reference.md that have been used in pyelink.
4
+
5
+ 1. [ ] abort_file_transfer
6
+ 2. [ ] abort_playback
7
+ 3. [ ] accept_target_fixation
8
+ 4. [x] active_eye — **Used in:** pyelink/core.py, pyelink/settings.py
9
+ 5. [ ] add_file_preamble_text
10
+ 6. [x] allow_pupil_without_cr — **Used in:** pyelink/core.py
11
+ 7. [ ] always_default_calibration
12
+ 8. [ ] ambient_filter_constant
13
+ 9. [ ] analog_binocular_mapping
14
+ 10. [ ] analog_dac_range
15
+ 11. [ ] analog_force_4channel
16
+ 12. [ ] analog_no_pupil_value
17
+ 13. [ ] analog_out_data_type
18
+ 14. [ ] analog_p_maximum
19
+ 15. [ ] analog_strobe_delay
20
+ 16. [ ] analog_strobe_line
21
+ 17. [ ] analog_strobe_polarity
22
+ 18. [ ] analog_strobe_time
23
+ 19. [ ] analog_x_range
24
+ 20. [ ] analog_y_range
25
+ 21. [ ] apply_last_drift_correction
26
+ 22. [ ] auto_calibration_messages
27
+ 23. [ ] autocal_minimum_fixation
28
+ 24. [ ] autocal_minimum_saccade
29
+ 25. [ ] autocal_saccade_fraction
30
+ 26. [ ] automatic_calibration_pacing
31
+ 27. [x] autothreshold_click — **Used in:** pyelink/settings.py, pyelink/calibration/base.py
32
+ 28. [x] autothreshold_repeat — **Used in:** pyelink/settings.py, pyelink/calibration/base.py
33
+ 29. [ ] aux_mouse_simulation
34
+ 30. [ ] begin_macro
35
+ 31. [x] binocular_enabled — **Used in:** pyelink/core.py, pyelink/settings.py
36
+ 32. [ ] black_filter_constant
37
+ 33. [ ] blink_offset_verify_time
38
+ 34. [ ] button_debounce_time
39
+ 35. [ ] button_function
40
+ 36. [ ] button_status_display
41
+ 37. [ ] cal_repeat_first_target
42
+ 38. [x] calibration_area_proportion — **Used in:** pyelink/core.py, pyelink/settings.py
43
+ 39. [ ] calibration_average
44
+ 40. [ ] calibration_bicubic_correction
45
+ 41. [ ] calibration_bicubic_weights
46
+ 42. [ ] calibration_collection_interval
47
+ 43. [x] calibration_corner_scaling — **Used in:** pyelink/core.py, pyelink/settings.py
48
+ 44. [ ] calibration_fixation_data
49
+ 45. [ ] calibration_samples
50
+ 46. [ ] calibration_sequence
51
+ 47. [ ] calibration_status
52
+ 48. [ ] calibration_targets
53
+ 49. [x] calibration_type — **Used in:** pyelink/core.py
54
+ 50. [ ] call_option_menu_mode
55
+ 51. [ ] call_setup_menu_mode
56
+ 52. [ ] camera_color_ramp
57
+ 53. [ ] cl_edf_identifier
58
+ 54. [ ] clear_button_list
59
+ 55. [ ] clear_href_points
60
+ 56. [x] clear_screen — **Used in:** pyelink/core.py
61
+ 57. [x] close_data_file — **Used in:** pyelink/core.py
62
+ 58. [ ] collect_target_fixation
63
+ 59. [x] corneal_mode — **Used in:** pyelink/core.py
64
+ 60. [ ] corneal_select_limits
65
+ 61. [ ] corneal_select_size
66
+ 62. [ ] create_button
67
+ 63. [ ] create_key_button
68
+ 64. [ ] current_camera
69
+ 65. [ ] data_drive_directory
70
+ 66. [ ] data_drive_name
71
+ 67. [ ] data_file_name
72
+ 68. [ ] data_file_path
73
+ 69. [ ] data_message
74
+ 70. [ ] default_eye_mapping
75
+ 71. [ ] delete_all_key_buttons
76
+ 72. [ ] delete_all_key_functions
77
+ 73. [ ] delete_macro
78
+ 74. [ ] disable_cal_auto_manual_switch
79
+ 75. [ ] disable_cal_auto_sequence
80
+ 76. [ ] disable_cal_backspace
81
+ 77. [ ] disable_cal_trigger
82
+ 78. [ ] disable_corneal_reflection
83
+ 79. [ ] disable_gaze_cursors
84
+ 80. [ ] disable_head_camera
85
+ 81. [ ] display_user_menu
86
+ 82. [ ] do_macro
87
+ 83. [ ] do_mode_start_flush
88
+ 84. [ ] draw_box
89
+ 85. [x] draw_cross — **Used in:** pyelink/calibration/psychopy_backend.py, pyelink/calibration/base.py
90
+ 86. [ ] draw_filled_box
91
+ 87. [x] draw_line — **Used in:** pyelink/calibration/pyglet_backend.py, pyelink/calibration/pygame_backend.py, pyelink/calibration/psychopy_backend.py, pyelink/calibration/base.py
92
+ 88. [ ] draw_link_crosshairs
93
+ 89. [x] draw_text — **Used in:** pyelink/core.py, pyelink/display/pyglet_display.py, pyelink/display/psychopy_display.py, pyelink/display/pygame_display.py, pyelink/display/base.py
94
+ 90. [ ] drift_correct_mouse
95
+ 91. [ ] drift_correction
96
+ 92. [ ] drift_correction_fraction
97
+ 93. [ ] drift_correction_rpt_beep
98
+ 94. [ ] drift_correction_rpt_error
99
+ 95. [ ] drift_correction_samples
100
+ 96. [ ] drift_correction_targets
101
+ 97. [ ] drift_correction_weights
102
+ 98. [ ] driftcorrect_cr_disable
103
+ 99. [ ] echo
104
+ 100. [x] elcl_hold_if_no_corneal — **Used in:** pyelink/core.py
105
+ 101. [ ] elcl_pupil_symmetry_gain
106
+ 102. [x] elcl_search_if_no_corneal — **Used in:** pyelink/core.py
107
+ 103. [x] elcl_use_pcr_matching — **Used in:** pyelink/core.py
108
+ 104. [x] enable_automatic_calibration — **Used in:** pyelink/core.py, pyelink/settings.py
109
+ 105. [x] enable_camera_position_detect — **Used in:** pyelink/settings.py, pyelink/calibration/base.py
110
+ 106. [ ] enable_file_buffer
111
+ 107. [x] enable_search_limits — **Used in:** pyelink/settings.py, pyelink/calibration/base.py
112
+ 108. [ ] end_macro
113
+ 109. [ ] exit_program
114
+ 110. [ ] eye_current_limit
115
+ 111. [ ] eyelink_file_xfer_packets
116
+ 112. [ ] fast_velocity_filter
117
+ 113. [ ] file_buffer_record_display
118
+ 114. [ ] file_event_data
119
+ 115. [x] file_event_filter — **Used in:** pyelink/core.py, pyelink/settings.py
120
+ 116. [ ] file_sample_control
121
+ 117. [x] file_sample_data — **Used in:** pyelink/core.py, pyelink/settings.py
122
+ 118. [x] file_sample_raw_pcr — **Used in:** pyelink/core.py
123
+ 119. [ ] fixation_update_accumulate
124
+ 120. [ ] fixation_update_interval
125
+ 121. [ ] flush_logfile
126
+ 122. [x] force_corneal_reflection — **Used in:** pyelink/core.py
127
+ 123. [ ] force_elcl_mode
128
+ 124. [ ] force_network_present
129
+ 125. [ ] generate_default_targets
130
+ 126. [ ] hcam_center
131
+ 127. [ ] hcam_scale
132
+ 128. [x] heuristic_filter — **Used in:** pyelink/core.py, pyelink/settings.py
133
+ 129. [ ] hide_abort_trial
134
+ 130. [ ] horizontal_target_y
135
+ 131. [ ] image_from_setup_menu
136
+ 132. [ ] imager_gain
137
+ 133. [ ] initial_thresholds
138
+ 134. [ ] input_data_masks
139
+ 135. [ ] input_data_ports
140
+ 136. [ ] key_function
141
+ 137. [ ] last_button_list
142
+ 138. [ ] last_button_pressed
143
+ 139. [ ] left_eye_head_camera_offset
144
+ 140. [ ] link_connect_command
145
+ 141. [ ] link_echo_filter
146
+ 142. [ ] link_event_data
147
+ 143. [x] link_event_filter — **Used in:** pyelink/core.py, pyelink/settings.py
148
+ 144. [ ] link_flush_age
149
+ 145. [ ] link_motion_flush
150
+ 146. [ ] link_pacing_usec
151
+ 147. [ ] link_sample_control
152
+ 148. [x] link_sample_data — **Used in:** pyelink/core.py, pyelink/settings.py
153
+ 149. [x] link_sample_raw_pcr — **Used in:** pyelink/core.py
154
+ 150. [ ] link_sample_recency
155
+ 151. [ ] link_shutdown_command
156
+ 152. [ ] link_update_interval
157
+ 153. [ ] lock_active_eye
158
+ 154. [ ] lock_eye_after_calibration
159
+ 155. [ ] lock_record_exit
160
+ 156. [ ] logfile_contents
161
+ 157. [ ] macro_line
162
+ 158. [ ] manual_collection_fixation_lookback
163
+ 159. [ ] manual_collection_minimum_fixation
164
+ 160. [ ] mark_playback_start
165
+ 161. [ ] mirror_elcl_image
166
+ 162. [ ] mirror_eyecam_image
167
+ 163. [ ] mirror_headcam_image
168
+ 164. [ ] normal_click_dcorr
169
+ 165. [ ] online_dcorr_button
170
+ 166. [ ] online_dcorr_collection_time
171
+ 167. [ ] online_dcorr_max_lookback
172
+ 168. [ ] online_dcorr_maxangle
173
+ 169. [ ] online_dcorr_refposn
174
+ 170. [ ] online_dcorr_trigger
175
+ 171. [x] open_data_file — **Used in:** pyelink/core.py
176
+ 172. [ ] option_menu_mode
177
+ 173. [ ] output_menu_mode
178
+ 174. [ ] parser_discard_startup
179
+ 175. [ ] print_position
180
+ 176. [ ] pupil_crosstalk_fixup
181
+ 177. [ ] pupil_min_size
182
+ 178. [ ] pupil_select_limits
183
+ 179. [ ] pupil_select_size
184
+ 180. [x] pupil_size_diameter — **Used in:** pyelink/core.py
185
+ 181. [ ] randomize_calibration_order
186
+ 182. [ ] randomize_validation_order
187
+ 183. [x] raw_pcr_dual_corneal — **Used in:** pyelink/core.py
188
+ 184. [ ] raw_pcr_processing
189
+ 185. [ ] read_ioport
190
+ 186. [ ] rec_plot_colors
191
+ 187. [ ] rec_plot_mclick_step
192
+ 188. [ ] rec_plot_simple_offset
193
+ 189. [ ] record_data_defaults
194
+ 190. [x] record_status_message — **Used in:** pyelink/core.py
195
+ 191. [ ] recording_parse_type
196
+ 192. [ ] refresh_buttons
197
+ 193. [ ] remote_cal_complete
198
+ 194. [ ] remote_cal_data
199
+ 195. [ ] remote_cal_enable
200
+ 196. [ ] remote_cal_href_data
201
+ 197. [ ] remote_cal_target
202
+ 198. [x] remote_camera_position — **Used in:** pyelink/core.py
203
+ 199. [ ] required_disk_space
204
+ 200. [ ] reset_cal_data_points
205
+ 201. [ ] reset_record_lock
206
+ 202. [ ] restore_old_calibration
207
+ 203. [ ] right_eye_head_camera_offset
208
+ 204. [ ] saccade_acceleration_threshold
209
+ 205. [ ] saccade_extend_velocity
210
+ 206. [ ] saccade_max_extend_after
211
+ 207. [ ] saccade_max_extend_start
212
+ 208. [ ] saccade_motion_threshold
213
+ 209. [ ] saccade_offset_verify_time
214
+ 210. [ ] saccade_onset_verify_time
215
+ 211. [ ] saccade_pursuit_fixup
216
+ 212. [ ] saccade_velocity_threshold
217
+ 213. [ ] samples_between_pupil_area
218
+ 214. [ ] samples_between_resolution
219
+ 215. [ ] samples_between_status
220
+ 216. [ ] samples_between_timestamps
221
+ 217. [x] screen_distance — **Used in:** pyelink/core.py, pyelink/settings.py, pyelink/calibration/targets.py
222
+ 218. [ ] screen_dump
223
+ 219. [x] screen_phys_coords — **Used in:** pyelink/core.py
224
+ 220. [x] screen_pixel_coords — **Used in:** pyelink/core.py
225
+ 221. [ ] screen_write_prescale
226
+ 222. [ ] search_limits_rect
227
+ 223. [ ] search_limits_shape
228
+ 224. [ ] search_limits_size
229
+ 225. [ ] select_eye_after_validation
230
+ 226. [ ] select_parser_configuration
231
+ 227. [ ] set_href_point
232
+ 228. [x] set_idle_mode — **Used in:** pyelink/core.py
233
+ 229. [ ] set_image_channel
234
+ 230. [ ] set_imaging_mode
235
+ 231. [ ] set_record_data_defaults
236
+ 232. [x] setup_menu_mode — **Used in:** pyelink/core.py
237
+ 233. [ ] show_exposure
238
+ 234. [ ] start_bitmap_transfer
239
+ 235. [ ] start_calibration
240
+ 236. [ ] start_drift_correction
241
+ 237. [ ] start_file_transfer
242
+ 238. [ ] start_in_camera_setup
243
+ 239. [ ] start_playback
244
+ 240. [x] start_recording — **Used in:** pyelink/__init__.py, pyelink/core.py
245
+ 241. [ ] start_validation
246
+ 242. [x] sticky_mode_data_enable — **Used in:** pyelink/core.py
247
+ 243. [ ] sticky_mode_parse_type
248
+ 244. [ ] stop_bitmap_transfer
249
+ 245. [x] track_search_limits — **Used in:** pyelink/settings.py, pyelink/calibration/base.py
250
+ 246. [ ] use_camimg_palette_colors
251
+ 247. [ ] use_high_speed
252
+ 248. [ ] user_record_key_item
253
+ 249. [ ] val_repeat_first_target
254
+ 250. [x] validation_area_proportion — **Used in:** pyelink/core.py, pyelink/settings.py
255
+ 251. [x] validation_corner_scaling — **Used in:** pyelink/core.py, pyelink/settings.py
256
+ 252. [ ] validation_correct_drift
257
+ 253. [ ] validation_maximum_deviation
258
+ 254. [ ] validation_online_fixup
259
+ 255. [ ] validation_resample_worst
260
+ 256. [ ] validation_samples
261
+ 257. [ ] validation_sequence
262
+ 258. [ ] validation_targets
263
+ 259. [ ] validation_weights
264
+ 260. [ ] validation_worst_error
265
+ 261. [ ] velocity_write_prescale
266
+ 262. [ ] video_avi_timecode_enabled
267
+ 263. [ ] video_avi_timecode_offset
268
+ 264. [ ] video_background_color
269
+ 265. [ ] video_binoc_cursor_colors
270
+ 266. [ ] video_border_color
271
+ 267. [ ] video_cal_backgr_color
272
+ 268. [ ] video_cal_hide_cursors
273
+ 269. [ ] video_cal_target_color
274
+ 270. [ ] video_cal_target_size
275
+ 271. [ ] video_click_dcorr
276
+ 272. [ ] video_cursor_limit
277
+ 273. [ ] video_cursor_type
278
+ 274. [ ] video_custom_cursor_color
279
+ 275. [ ] video_dim_mouse_bgcolor
280
+ 276. [ ] video_dim_mouse_fgcolor
281
+ 277. [ ] video_monoc_cursor_color
282
+ 278. [ ] video_no_record_graphics
283
+ 279. [ ] video_overlay_available
284
+ 280. [ ] video_overlay_on
285
+ 281. [ ] video_timecode_bgcolor
286
+ 282. [ ] video_timecode_fgcolor
287
+ 283. [ ] video_timecode_mode
288
+ 284. [ ] video_timecode_position
289
+ 285. [ ] video_window
290
+ 286. [ ] video_window_default
291
+ 287. [ ] write_ioport
292
+ 288. [ ] x_gaze_constraint
293
+ 289. [ ] y_gaze_constraint