Skip to main content

Generate customizable fixation targets for vision science experiments

Project description

Visual Fixation Target

PyPI version Downloads License

A Python package to generate customizable fixation targets for eye tracking experiments.

Description

This package generates fixation target configurations as described by Thaler et al. (2013). It supports different target types:

  • A: Center dot only
  • B: Outer circle only
  • C: Cross only
  • AB, AC, BC: Combinations of two components
  • ABC: All components (center dot + outer circle + cross)

All dimensions are specified in visual angles (degrees) and automatically converted to pixels based on your screen parameters.

Target Type Examples

A
(Center dot)
B
(Outer circle)
C
(Cross)
AB
(Center + Outer)
AC
(Center + Cross)
BC
(Outer + Cross)
ABC
(All components)

Installation

From PyPI

pip install fixation-target

From source

git clone https://github.com/mh-salari/fixation-target.git
cd fixation-target
pip install -e .

Usage

Command-line Interface

Using a JSON configuration file

Create a JSON config file with your parameters:

{
  "screen_width_mm": 476.64,
  "screen_height_mm": 268.11,
  "screen_width_px": 1920,
  "screen_height_px": 1080,
  "viewing_distance_mm": 930,
  "target_type": "ABC",
  "center_diameter_in_degrees": 0.1,
  "outer_diameter_in_degrees": 0.6,
  "cross_width_in_degrees": 0.15,
  "center_color": [0, 0, 0, 255],
  "outer_color": [0, 0, 0, 255],
  "cross_color": [255, 255, 255, 255],
  "background_diameter_in_degrees": 1.0,
  "background_color": [128, 128, 128, 255]
}

Load and use it:

fixation-target --json config.json --output output/

Using command-line arguments

fixation-target \
  --output output/ \
  --target-type ABC \
  --screen-width-mm 476.64 \
  --screen-height-mm 268.11 \
  --screen-width-px 1920 \
  --screen-height-px 1080 \
  --viewing-distance-mm 930 \
  --center-diameter 0.1 \
  --outer-diameter 0.6 \
  --cross-width 0.15 \
  --filename my_target \

Python API

from pathlib import Path
from fixation_target import fixation_target

# Generate an ABC target and save both PNG and SVG
result = fixation_target(
    screen_width_mm=476.64,
    screen_height_mm=268.11,
    screen_width_px=1920,
    screen_height_px=1080,
    viewing_distance_mm=930,
    save_path=Path("output"),
    target_type="ABC",
    center_diameter_in_degrees=0.1,
    outer_diameter_in_degrees=0.6,
    cross_width_in_degrees=0.15,
    center_color=(0, 0, 0, 255),      # black
    outer_color=(0, 0, 0, 255),       # black
    cross_color=(255, 255, 255, 255), # white
    background_diameter_in_degrees=1.0,
    background_color=(128, 128, 128, 255),  # gray
    show=True
)

# Access the results
print(f"PNG saved to: {result['png_path']}")
print(f"SVG saved to: {result['svg_path']}")
pil_image = result['image']  # PIL Image object

Target Types

  • A: Center dot only - useful for minimal fixation point
  • B: Outer circle only - provides a reference boundary
  • C: Cross only - traditional fixation cross
  • AB: Center dot + outer circle
  • AC: Center dot + cross
  • BC: Outer circle + cross
  • ABC: All components (recommended for stable fixation)

Parameters

Required Screen Parameters

  • screen_width_mm: Physical width of your screen in millimeters
  • screen_height_mm: Physical height of your screen in millimeters
  • screen_width_px: Screen resolution width in pixels
  • screen_height_px: Screen resolution height in pixels
  • viewing_distance_mm: Distance from viewer to screen in millimeters

Target Parameters

  • target_type: One of "A", "B", "C", "AB", "AC", "BC", "ABC" (default: "ABC")
  • center_diameter_in_degrees: Diameter of center dot in visual degrees (default: 0.1)
  • outer_diameter_in_degrees: Diameter of outer circle in visual degrees (default: 0.6)
  • cross_width_in_degrees: Width of cross lines in visual degrees (default: 0.15)
  • center_color: RGBA color tuple for center dot (default: black)
  • outer_color: RGBA color tuple for outer circle (default: black)
  • cross_color: RGBA color tuple for cross (default: white)
  • background_diameter_in_degrees: Optional background circle diameter
  • background_color: Optional background circle color (RGBA tuple)
  • filename: Base filename without extension (default: "fixation"). Target type suffix will be appended automatically
  • save_png: Whether to save PNG file (default: True)
  • save_svg: Whether to save SVG file (default: True)
  • antialias: Apply 2x supersampling for smoother PNG edges (default: True)
  • show: Whether to display the generated image (default: True)

Return Value

The function returns a dictionary containing:

  • png_path: Path to the saved PNG file (None if save_png=False)
  • svg_path: Path to the saved SVG file (None if save_svg=False)
  • image: PIL Image object (always returned)

Output Files

The package can generate both PNG and SVG formats (controlled by save_png and save_svg parameters):

  • PNG: Raster image with optional anti-aliasing (2x supersampling)
  • SVG: Vector graphics for infinite scalability

When saving is enabled, files are named as {filename}_{target_type}.{png|svg}. For example, with filename="my_target" and target_type="ABC":

  • my_target_abc.png
  • my_target_abc.svg

Note: save_path must be provided when save_png=True or save_svg=True. It's optional when both are False (useful for getting only the PIL Image object).

Reference

Thaler, L., Schütz, A.C., Goodale, M.A., & Gegenfurtner, K.R. (2013). What is the best fixation target? The effect of target shape on stability of fixational eye movements. Vision Research, 76, 31-42. https://doi.org/10.1016/j.visres.2012.10.012

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

This project has received funding from the European Union's Horizon Europe research and innovation funding program under grant agreement No 101072410, Eyes4ICU project.

Funded by EU Eyes4ICU

Author

Mohammadhossein Salari Email: mohammadhossein.salari@gmail.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fixation_target-1.4.3.tar.gz (456.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fixation_target-1.4.3-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file fixation_target-1.4.3.tar.gz.

File metadata

  • Download URL: fixation_target-1.4.3.tar.gz
  • Upload date:
  • Size: 456.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for fixation_target-1.4.3.tar.gz
Algorithm Hash digest
SHA256 47f83f1cbf43bb97d70fbf6138b98279d6d9d9dcbe7366c2e5bbb4b54972b7ea
MD5 3bbf4ad59ac1acce36c4ba240c7c5fef
BLAKE2b-256 957df638587d5db3b33f7a15594933774906ccc0569e274e15beabdb505f6eb3

See more details on using hashes here.

File details

Details for the file fixation_target-1.4.3-py3-none-any.whl.

File metadata

File hashes

Hashes for fixation_target-1.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 587e9fc6067fb9a61c31859ee98916dae148ab62aca7e1386c4d4ad84422ffa0
MD5 3663cce1726f621589233163a2384c69
BLAKE2b-256 06b823b3bc50801777106d7b9dc29f427d35a5ed17986008f04176f9a5317219

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page