A PsychoPy ramp-and-hold thermal pain task driven by a Medoc MMS thermode. Each sequence ramps the thermode from a baseline to a target temperature, holds, then ramps back down; the participant rates pain on a 0–10 scale during the ramp-down while the task records the temperature stream.
The task does not read the program from MMS — it selects the program, sends START, and then
observes the thermode's temperature stream, inferring each phase (baseline → ramp-up → hold →
ramp-down → baseline) from the measured curve. A vendored Medoc MMS external-control client
(medoc) is included for standalone monitoring and scripted runs.
| Document | Description |
|---|---|
| Usage Guide | Running the task, the setup wizard, MMS arming sequence, keyboard controls, the medoc CLI, and output files |
| Development Guide | Developer setup, co-developing psyexp-core, project structure, run files, and key constants |
| Release Guide | Versioning (SemVer), verification, and how releases are published |
| MMS Networking | The external-control protocol and how the status poll loop stays responsive |
| MMS Program Parameters | How an MMS program maps onto a conditions/*.toml run file |
UV is used for development; Anaconda is the production environment. Both install from the same
pyproject.toml — see the Development Guide for details. PsychoPy needs
psychtoolbox, which has no arm64 PyPI wheel — install it manually from the lab build (see the
Development Guide).
UV (development):
uv venv
uv sync --inexact
uv run heat-taskAnaconda (production):
conda env create -f environment.yml
conda activate heat-task
heat-taskRun the task and follow the on-screen MMS arming prompts. To monitor or drive the thermode without
the task, use the medoc CLI:
uv run medoc monitor 192.168.1.100 15 # select program 15 and watch status
uv run medoc run 192.168.1.100 15 # select, start, and monitor a programSee the Usage Guide for the full command reference and options.
Medoc's own walkthrough of the external-control workflow: https://www.youtube.com/watch?v=itfv7_E__EM&t=700s