From fb931faa0f6d44aa495ce8d0b68f01b98f109da3 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 15:04:34 +1000 Subject: [PATCH 01/94] pr vep stuff --- .github/actions/setup-conda-env/action.yml | 32 +++ .github/workflows/docs.yml | 39 +-- .github/workflows/test.yml | 18 +- .gitignore | 4 +- doc/experiments/vvep.rst | 140 +++++++++ doc/index.rst | 1 + eegnb/experiments/BlockExperiment.py | 150 ++++++++++ eegnb/experiments/Experiment.py | 62 +++- eegnb/experiments/visual_vep/__init__.py | 10 + .../visual_vep/pattern_reversal_vep.py | 271 ++++++++++++++++++ environments/eeg-expy-docsbuild.yml | 3 +- environments/eeg-expy-full.yml | 1 + environments/eeg-expy-stimpres.yml | 1 + environments/eeg-expy-streaming.yml | 1 + environments/eeg-expy-streamstim.yml | 1 + requirements.txt | 9 +- 16 files changed, 695 insertions(+), 48 deletions(-) create mode 100644 .github/actions/setup-conda-env/action.yml create mode 100644 doc/experiments/vvep.rst create mode 100644 eegnb/experiments/BlockExperiment.py create mode 100644 eegnb/experiments/visual_vep/pattern_reversal_vep.py diff --git a/.github/actions/setup-conda-env/action.yml b/.github/actions/setup-conda-env/action.yml new file mode 100644 index 000000000..4867fd1b0 --- /dev/null +++ b/.github/actions/setup-conda-env/action.yml @@ -0,0 +1,32 @@ +name: Set up conda env +description: > + Install Miniconda and create/activate an EEG-ExPy conda environment from + the given env yml. Shared by the Test and Typecheck jobs so the two + don't drift apart. Environment name is not set in the yml files so local + installs can use any name they like. + +inputs: + environment-file: + required: true + description: Path to the conda environment yml file to install from. + activate-environment: + required: true + description: Name to give the created environment. + python-version: + required: false + description: > + Python version to pin (e.g. '3.8'). Overrides the version conda would + otherwise resolve from the environment file's constraints. When omitted, + conda resolves freely within the environment file's range. + +runs: + using: composite + steps: + - uses: conda-incubator/setup-miniconda@v3 + with: + environment-file: ${{ inputs.environment-file }} + activate-environment: ${{ inputs.activate-environment }} + python-version: ${{ inputs.python-version }} + auto-activate-base: false + channels: conda-forge + miniconda-version: "latest" diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 5f8953695..f7064ff92 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -9,29 +9,20 @@ on: jobs: build: runs-on: ubuntu-22.04 + defaults: + run: + shell: bash -el {0} steps: - name: Checkout repo uses: actions/checkout@v3 with: - fetch-depth: 0 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: 3.8 - - - name: Install dependencies - run: | - make install-deps-apt - python -m pip install --upgrade pip wheel - python -m pip install attrdict - - make install-deps-wxpython - - - name: Build project - run: | - make install-docs-build-dependencies + fetch-depth: 0 + - name: Set up conda env + uses: ./.github/actions/setup-conda-env + with: + environment-file: environments/eeg-expy-docsbuild.yml + activate-environment: eeg-expy-docsbuild - name: Get list of changed files id: changes @@ -40,7 +31,6 @@ jobs: git diff --name-only origin/master...HEAD > changed_files.txt cat changed_files.txt - - name: Determine build mode id: mode run: | @@ -48,13 +38,13 @@ jobs: echo "FULL_BUILD=true" >> $GITHUB_ENV echo "Detected non-example file change. Full build triggered." else - CHANGED_EXAMPLES=$(grep '^examples/.*\.py$' changed_files.txt | paste -sd '|' -) + # || true prevents grep's exit code 1 (no matches) from aborting the step + CHANGED_EXAMPLES=$(grep '^examples/.*\.py$' changed_files.txt | paste -sd '|' - || true) echo "FULL_BUILD=false" >> $GITHUB_ENV echo "CHANGED_EXAMPLES=$CHANGED_EXAMPLES" >> $GITHUB_ENV echo "Changed examples: $CHANGED_EXAMPLES" fi - - name: Cache built documentation id: cache-docs uses: actions/cache@v4 @@ -65,15 +55,12 @@ jobs: restore-keys: | ${{ runner.os }}-sphinx- - - name: Build docs - run: | - make docs + run: make docs - - name: Deploy Docs uses: peaceiris/actions-gh-pages@v3 - if: github.ref == 'refs/heads/master' # TODO: Deploy seperate develop-version of docs? + if: github.ref == 'refs/heads/master' with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: doc/_build/html diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5b4f3c6aa..570a8bc54 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,15 +29,12 @@ jobs: if: "startsWith(runner.os, 'Linux')" run: | make install-deps-apt - - name: Install conda - uses: conda-incubator/setup-miniconda@v3 + - name: Set up conda env + uses: ./.github/actions/setup-conda-env with: environment-file: environments/eeg-expy-full.yml - auto-activate-base: false - python-version: ${{ matrix.python_version }} activate-environment: eeg-expy-full - channels: conda-forge - miniconda-version: "latest" + python-version: ${{ matrix.python_version }} - name: Fix PsychXR numpy dependency DLL issues (Windows only) if: matrix.os == 'windows-latest' @@ -75,15 +72,12 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Install conda - uses: conda-incubator/setup-miniconda@v3 + - name: Set up conda env + uses: ./.github/actions/setup-conda-env with: environment-file: environments/eeg-expy-full.yml - auto-activate-base: false - python-version: ${{ matrix.python_version }} activate-environment: eeg-expy-full - channels: conda-forge - miniconda-version: "latest" + python-version: ${{ matrix.python_version }} - name: Typecheck run: | make typecheck diff --git a/.gitignore b/.gitignore index 8ce78c6c7..2b5152507 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,8 @@ __pycache__ # Built as part of docs doc/auto_examples doc/_build +doc/generated/ +doc/sg_execution_times.rst # Built by auto_examples examples/visual_cueing/*.csv @@ -18,4 +20,4 @@ htmlcov # PyCharm .idea/ -**/.DS_Store \ No newline at end of file +**/.DS_Store diff --git a/doc/experiments/vvep.rst b/doc/experiments/vvep.rst new file mode 100644 index 000000000..e8da1e58f --- /dev/null +++ b/doc/experiments/vvep.rst @@ -0,0 +1,140 @@ +******************************** +_ +********************************* + +Visual Pattern Reversal VEP +=========================== + +The Pattern Reversal VEP (PR-VEP) is the most widely studied visual +evoked potential paradigm. A checkerboard pattern swaps its black and +white squares at a regular rate (typically 2 reversals per second) while +the participant fixates a central dot. Each reversal elicits a +stereotyped waveform whose most prominent feature is the **P100**, a +positive deflection occurring ~100ms after the reversal at midline +occipital electrodes. The other components are a small N75 before it +and an N145 after it. + +In this notebook, we will attempt to detect the P100 with the Muse +headband (plus an extra electrode at Oz) using monocular pattern +reversal blocks, and run the analysis pipeline to pull out the per-eye +P100 latency and the interocular latency difference. + + +Stimulus Parameters +------------------- + +Parameters follow the ISCEV "large check" option [Odom2016]_: + +- **Check size**: 1° of visual angle (0.5 cpd) +- **Reversal rate**: 2 reversals per second +- **Field size**: 16° (monitor) / 20° (VR) +- **Contrast**: High contrast black/white, mean luminance held constant +- **Fixation**: Central red dot +- **Recording**: Monocular, alternating left and right eye per block + +Four blocks of 50 seconds by default, giving ~100 reversals per eye per +block. + + +Monitor vs VR +------------- + +The experiment supports both standard monitor presentation and Meta +Quest (VR) presentation via ``use_vr=True``. + +**VR mode is preferred** for two reasons: + +- Each eye sees the checkerboard independently, so there is no manual + eye closure and no light leakage. +- The OpenXR compositor supplies a per-frame predicted photon time + (``tracking_state.headPose.time``), which is attached to the EEG + marker in place of ``time.time()``. This cancels most of the + output-side display latency — render queue, compositor buffering, + scan-out, HMD persistence — on a per-frame basis, which matters for + P100 latency where shifts of 10–20ms are meaningful. + +In monitor mode the software marker is the only timing source, so any +fixed display-pipeline latency has to be handled separately (see below). +A proof-of-concept photodiode sync patch is drawn in the bottom-left +corner of the window in monitor mode — a 50px square whose polarity +flips with each reversal. Taping a photodiode over that square and +routing its TTL into a spare channel would give hardware timing ground +truth; the code is in place but the hardware path has not been wired +up yet. + + +Electrode Placement +------------------- + +The P100 is generated in occipital cortex, so the electrode that +matters is **Oz**. The Muse's default electrodes (TP9, TP10, AF7, AF8) +will pick up a blurry attenuated version of the response but are badly +placed for the actual peak. + +**Muse users: use the extra-electrode mod and place the external +electrode at Oz.** POz is an acceptable fallback if Oz is mechanically +awkward. See the :doc:`../misc/using_an_extra_electrod_with_the_muse` +page for build details. + +For full-cap devices (OpenBCI, g.tec Unicorn, etc.), use Oz as primary +and add any of O1/O2/POz/PO3/PO4 you have channels for. + + +Timing Notes +------------ + +Measured P100 latency is the true P100 latency plus the display-pipeline +delay, plus the EEG device's input delay, plus any clock-alignment +error. For a Muse the device delay alone is ~30–50ms, so if you need +*absolute* latencies you need to characterise and subtract it; for +*relative* comparisons (between-eye, within-subject across sessions) it +cancels out and you can ignore it. + +Two sidecar files are written alongside each recording to let you check +timing after the fact: + +- ``{save_fn}_timing.csv`` — per-trial software and compositor + timestamps and their delta +- ``{save_fn}_frame_stats.json`` — per-frame intervals and dropped-frame + count (150%-of-refresh threshold) + +During each trial loop, Python garbage collection is disabled and +process priority is raised via ``psychopy.core.rush(True)`` to reduce +the chance of a dropped frame during a critical flip. Both are reset +between blocks. + + +Running the Experiment +---------------------- + +.. code-block:: python + + from eegnb.devices.eeg import EEG + from eegnb.experiments.visual_vep import VisualPatternReversalVEP + + eeg = EEG(device='muse2') + experiment = VisualPatternReversalVEP( + display_refresh_rate=60, # must match display and be divisible by 2Hz + eeg=eeg, + save_fn='my_vep_recording.csv', + use_vr=True, # False for monitor mode + ) + experiment.run() + + +API Reference +------------- + +.. autoclass:: eegnb.experiments.visual_vep.VisualPatternReversalVEP + :members: + :undoc-members: + :show-inheritance: + + +References +---------- + +.. [Odom2016] Odom JV, Bach M, Brigell M, Holder GE, McCulloch DL, Mizota A, + Tormene AP; International Society for Clinical Electrophysiology of Vision. + **ISCEV standard for clinical visual evoked potentials: (2016 update).** + *Documenta Ophthalmologica* 133(1):1-9. doi:10.1007/s10633-016-9553-y diff --git a/doc/index.rst b/doc/index.rst index 278093db3..ffa41e26f 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -19,6 +19,7 @@ experiments/vn170 experiments/vp300 experiments/vssvep + experiments/vvep experiments/cueing experiments/gonogo experiments/all_examples diff --git a/eegnb/experiments/BlockExperiment.py b/eegnb/experiments/BlockExperiment.py new file mode 100644 index 000000000..b18a6eaae --- /dev/null +++ b/eegnb/experiments/BlockExperiment.py @@ -0,0 +1,150 @@ +""" +BlockExperiment Class - Extends BaseExperiment with block-based functionality + +This class provides block-based experiment capabilities by inheriting from BaseExperiment +and overriding the run method to handle multiple blocks. It loads stimulus only once +and reuses it across blocks, while allowing block-specific instructions. + +Experiments that need block-based execution should inherit from this class instead of BaseExperiment. +""" +import gc +from abc import ABC +from time import time + +from .Experiment import BaseExperiment + + +class BlockExperiment(BaseExperiment, ABC): + """ + Inherits from BaseExperiment to provide block-based functionality. + + This class is designed for experiments that need to run as multiple blocks. + Each block has its own instructions and duration. It loads all stimuli at once, then re/uses it across blocks. + """ + + def __init__(self, exp_name, block_duration, eeg, save_fn, block_trial_size, n_blocks, iti: float, soa: float, jitter: float, + use_vr=False, use_fullscr=True, stereoscopic=False): + """ Initializer for the BlockExperiment Class + + Args: + exp_name (str): Name of the experiment + block_duration (float): Duration of each block in seconds + eeg: EEG device object for recording + save_fn (str): Save filename for data + block_trial_size (int): Number of trials per block + n_blocks (int): Number of blocks to run + iti (float): Inter-trial interval + soa (float): Stimulus on arrival + jitter (float): Random delay between stimulus + use_vr (bool): Use VR for displaying stimulus + use_fullscr (bool): Use fullscreen mode + """ + # Calculate total trials for the base class + total_trials = block_trial_size * n_blocks + + # Initialize BaseExperiment with total trials + # Pass None for duration if block_duration is None to ignore time spent in instructions + super().__init__(exp_name, block_duration, eeg, save_fn, total_trials, iti, soa, jitter, use_vr, use_fullscr, stereoscopic) + + # Block-specific parameters + self.block_duration = block_duration + self.block_trial_size = block_trial_size + self.n_blocks = n_blocks + + # Current block index + self.current_block_index = 0 + + def present_block_instructions(self, current_block): + """ + Display instructions for the current block to the user. + + This method is meant to be overridden by child classes to provide + experiment-specific instructions before each block. The base implementation + simply flips the window without adding any text. + + This method is called by __show_block_instructions in a loop until the user + provides input to continue or cancel the experiment. + + Args: + current_block (int): The current block number (0-indexed), used to customize + instructions for specific blocks if needed. + """ + self.window.flip() + + def _show_block_instructions(self, block_number): + """ + Show instructions for a specific block + + Args: + block_number (int): Current block number (0-indexed) + + Returns: + tuple: (continue_experiment, instruction_end_time) + - continue_experiment (bool): Whether to continue the experiment + """ + + # Clear any previous input + self._clear_user_input() + + # Wait for user input to continue + while True: + # Display the instruction text + super()._draw(lambda: self.present_block_instructions(block_number)) + + if self._user_input('start'): + return True + elif self._user_input('cancel'): + return False + + def run(self, instructions=True): + """ + Run the experiment as a series of blocks + + This method overrides BaseExperiment.run() to handle multiple blocks. + + Args: + instructions (bool): Whether to show the initial experiment instructions + """ + # Setup the experiment (creates window, loads stimulus once) + if not self.setup(instructions): + return False + + # Start EEG Stream once for all blocks + if self.eeg: + print("Wait for the EEG-stream to start...") + self.eeg.start(self.save_fn) + print("EEG Stream started") + + self._enable_frame_tracking() + + # Run each block + for block_index in range(self.n_blocks): + self.current_block_index = block_index + print(f"Starting block {block_index + 1} of {self.n_blocks}") + + # Show block-specific instructions + if not self._show_block_instructions(block_index): + break + + # Elevate process priority and disable GC during the trial loop + # to prevent OS scheduling jitter and ~1-10ms GC pauses that + # cause the Quest Link compositor to drop frames (hourglass). + # Both are restored between blocks so instruction screens run normally. + from psychopy import core + core.rush(True) + gc.disable() + try: + if not self._run_trial_loop(start_time=time(), duration=self.block_duration): + break + finally: + gc.enable() + core.rush(False) + + self._report_frame_stats() + + # Stop EEG Stream after all blocks + if self.eeg: + self.eeg.stop() + + # Close window at the end of all blocks + self.window.close() diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index 4d7cab119..1be58ba05 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -14,12 +14,14 @@ from psychopy import prefs from psychopy.visual.rift import Rift +import gc from time import time import random +import json import numpy as np from pandas import DataFrame -from psychopy import visual, event +from psychopy import visual, event, core from eegnb import generate_save_fn @@ -247,6 +249,11 @@ def _draw(self, present_stimulus: Callable): tracking_state = self.window.getTrackingState() self.window.calcEyePoses(tracking_state.headPose.thePose) self.window.setDefaultView() + # Per-frame predicted photon time from the OpenXR compositor. + # More accurate than time() + fixed lag constant — varies per frame + # based on compositor load. Stored so present_stimulus() can use it + # as the EEG marker timestamp. + self.predicted_display_time = tracking_state.headPose.time present_stimulus() def _clear_user_input(self): @@ -310,6 +317,43 @@ def iti_with_jitter(): return True + def _enable_frame_tracking(self): + """Enable per-frame interval recording for dropped frame diagnostics.""" + self.window.recordFrameIntervals = True + # Threshold for counting a frame as "dropped" — 50% over expected duration + expected_frame_dur = 1.0 / (self.window.displayRefreshRate if self.use_vr + else (self.window.getActualFrameRate() or 60)) + self.window.refreshThreshold = expected_frame_dur * 1.5 + + def _report_frame_stats(self): + """Print frame timing summary and save intervals alongside recording.""" + intervals = self.window.frameIntervals + if not intervals: + return + + intervals_ms = [i * 1000 for i in intervals] + dropped = self.window.nDroppedFrames + total = len(intervals) + mean_ms = np.mean(intervals_ms) + std_ms = np.std(intervals_ms) + max_ms = max(intervals_ms) + + print(f"\nFrame timing: {total} frames, {dropped} dropped ({dropped/total*100:.1f}%)") + print(f" Mean: {mean_ms:.2f}ms Std: {std_ms:.2f}ms Max: {max_ms:.2f}ms") + + if self.save_fn: + stats_path = self.save_fn.replace('.csv', '_frame_stats.json') + with open(stats_path, 'w') as f: + json.dump({ + 'total_frames': total, + 'dropped_frames': dropped, + 'mean_ms': round(mean_ms, 3), + 'std_ms': round(std_ms, 3), + 'max_ms': round(max_ms, 3), + 'intervals_ms': [round(i, 3) for i in intervals_ms] + }, f, indent=2) + print(f" Saved to {stats_path}") + def run(self, instructions=True): """ Run the experiment """ @@ -323,11 +367,23 @@ def run(self, instructions=True): self.eeg.start(self.save_fn, duration=self.duration + 5) print("EEG Stream started") + self._enable_frame_tracking() + # Record experiment until a key is pressed or duration has expired. record_start_time = time() - # Run the trial loop - self._run_trial_loop(record_start_time, self.duration) + # Elevate process priority and disable GC during the trial loop to + # prevent OS scheduling jitter and ~1-10ms GC pauses that cause + # dropped frames (visible as Quest Link hourglass). + core.rush(True) + gc.disable() + try: + self._run_trial_loop(record_start_time, self.duration) + finally: + gc.enable() + core.rush(False) + + self._report_frame_stats() # Clearing the screen for the next trial event.clearEvents() diff --git a/eegnb/experiments/visual_vep/__init__.py b/eegnb/experiments/visual_vep/__init__.py index e69de29bb..a6101e9a7 100644 --- a/eegnb/experiments/visual_vep/__init__.py +++ b/eegnb/experiments/visual_vep/__init__.py @@ -0,0 +1,10 @@ +"""Visual Evoked Potential (VEP) experiments module. + +This module contains experiments for measuring visual evoked potentials, +including pattern reversal VEP for assessing the P100 component. +""" + +from .vep import VisualVEP +from .pattern_reversal_vep import VisualPatternReversalVEP + +__all__ = ['VisualVEP', 'VisualPatternReversalVEP'] diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py new file mode 100644 index 000000000..00ae24f4e --- /dev/null +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -0,0 +1,271 @@ +from time import time +import csv +import os +import numpy as np + +from psychopy import visual +from typing import Optional, Dict, Any +from eegnb.devices.eeg import EEG +from eegnb.experiments.BlockExperiment import BlockExperiment +from stimupy.stimuli.checkerboards import contrast_contrast + +QUEST_PPD = 20 + +class VisualPatternReversalVEP(BlockExperiment): + + def __init__(self, display_refresh_rate: int, eeg: Optional[EEG] = None, save_fn=None, + block_duration_seconds=50, block_trial_size: int=100, n_blocks: int=4, use_vr=False, use_fullscr=True): + + self.display_refresh_rate = display_refresh_rate + soa=0.5 + iti=0 + jitter=0 + + super().__init__("Visual Pattern Reversal VEP", block_duration_seconds, eeg, save_fn, block_trial_size, n_blocks, iti, soa, jitter, use_vr, use_fullscr, stereoscopic=True) + + # Per-trial timing sidecar: records software time, compositor predicted + # display time, and delta for each trial. Written alongside the EEG CSV. + if save_fn: + timing_path = save_fn.replace('.csv', '_timing.csv') + else: + timing_path = 'vep_timing.csv' + self._timing_file = open(timing_path, 'w', newline='') + self._timing_writer = csv.writer(self._timing_file) + self._timing_writer.writerow( + ['trial_idx', 'software_time', 'predicted_display_time', 'delta_ms', 'use_vr'] + ) + + self.instruction_text = f"""Welcome to the Visual Pattern Reversal VEP experiment! + + This experiment will run for {n_blocks} blocks of {block_duration_seconds} seconds each. + + Press spacebar or controller to continue. + """ + + # Setting up the trial and parameter list + left_eye = 0 + right_eye = 1 + # Alternate between left and right eye blocks + block_eyes = [] + for block_num in range(n_blocks): + eye = left_eye if block_num % 2 == 0 else right_eye + block_eyes.extend([eye] * block_trial_size) + self.parameter = np.array(block_eyes) + + @staticmethod + def create_monitor_checkerboard(intensity_checks): + # Standard parameters for monitor-based pattern reversal VEP + # Using standard 1 degree check size at 30 pixels per degree + return contrast_contrast( + visual_size=(16, 16), # aspect ratio in degrees + ppd=72, # pixels per degree + frequency=(0.5, 0.5), # spatial frequency of the checkerboard (0.5 cpd = 1 degree check size) + intensity_checks=intensity_checks, + target_shape=(0, 0), + alpha=0, + tau=0 + ) + + @staticmethod + def create_vr_checkerboard(intensity_checks): + # Optimized parameters for Oculus/Meta Quest 2 with PC link + # Quest 2 has approximately 20 pixels per degree and a ~90° FOV + # Using standard 1 degree check size (0.5 cpd) + return contrast_contrast( + visual_size=(20, 20), # size in degrees - covers a good portion of the FOV + ppd=QUEST_PPD, # pixels per degree for Quest 2 + frequency=(0.5, 0.5), # spatial frequency (0.5 cpd = 1 degree check size) + intensity_checks=intensity_checks, + target_shape=(0, 0), + alpha=0, + tau=0 + ) + + def load_stimulus(self) -> Dict[str, Any]: + # Frame rate, in Hz + # TODO: Fix - Rift.GetActualFrameRate() crashes in psychxr due to 'EndFrame called before BeginFrame' + actual_frame_rate = np.round(self.window.displayRefreshRate if self.use_vr else self.window.getActualFrameRate()) + + # Ensure the expected frame rate matches and is divisable by the stimulus rate(soa) + assert actual_frame_rate % self.soa == 0, f"Expected frame rate divisable by stimulus rate: {self.soa}, but got {actual_frame_rate} Hz" + assert self.display_refresh_rate == actual_frame_rate, f"Expected frame rate {self.display_refresh_rate} Hz, but got {actual_frame_rate} Hz" + + if self.use_vr: + # Create the VR checkerboard + create_checkerboard = self.create_vr_checkerboard + # the window is large over the eye, checkerboard should only cover the central vision + size = self.window.size / 1.5 + else: + # Create the Monitor checkerboard + create_checkerboard = self.create_monitor_checkerboard + size = (self.window_size[1], self.window_size[1]) + + # Optode sync patch: small white/black square in the bottom-left corner. + # Alternates polarity with each checkerboard reversal so a photodiode + # taped to this corner produces a TTL pulse on every stimulus onset. + # Monitor path only — VR uses compositor timestamps instead. + if not self.use_vr: + patch_size = 50 # pixels + x = -self.window.size[0] / 2 + patch_size / 2 + y = -self.window.size[1] / 2 + patch_size / 2 + self.optode_patch = visual.Rect( + self.window, width=patch_size, height=patch_size, + pos=(x, y), units='pix', fillColor='white' + ) + else: + self.optode_patch = None + + # The surrounding / periphery needs to be dark when not using vr. + # Also used for covering eye which is not being stimulated. + self.black_background = visual.Rect(self.window, + width=self.window.size[0], + height=self.window.size[1], + fillColor='black') + + # A grey background behind the checkerboard must be used in vr to maintain luminence. + self.grey_background = visual.Rect(self.window, + width=self.window.size[0], + height=self.window.size[1], + fillColor=[-0.22, -0.22, -0.22]) + + # Create checkerboard stimuli + def create_checkerboard_stim(intensity_checks, pos): + return visual.ImageStim(self.window, + image=create_checkerboard(intensity_checks)['img'], + units='pix', size=size, color='white', pos=pos) + + # Create fixation stimuli + def create_fixation_stim(pos): + fixation = visual.GratingStim( + win=self.window, + pos=pos, + sf=400 if self.use_vr else 0.2, + color=[1, 0, 0] + ) + fixation.size = 0.02 if self.use_vr else 0.4 + return fixation + + # Create VR block instruction stimuli + def create_vr_block_instruction(pos): + return visual.TextStim(win=self.window, text="Focus on the red dot, and try not to blink whilst the squares are flashing, press the spacebar or pull the controller trigger when ready to commence.", color=[-1, -1, -1], + pos=pos, height=0.1) + + # Create and position stimulus + def create_eye_stimuli(eye_x_pos, pix_x_pos): + return { + 'checkerboards': [ + create_checkerboard_stim((1, -1), pos=(pix_x_pos, 0)), + create_checkerboard_stim((-1, 1), pos=(pix_x_pos, 0)) + ], + 'fixation': create_fixation_stim([eye_x_pos, 0]), + 'vr_block_instructions': create_vr_block_instruction((eye_x_pos, 0)) + } + + # Structure all stimuli in organized dictionary + if self.use_vr: + # Calculate pixel positions for stereoscopic presentation + window_width = self.window.size[0] + left_pix_x_pos = self.left_eye_x_pos * (window_width / 2) + right_pix_x_pos = self.right_eye_x_pos * (window_width / 2) + + return { + 'left': create_eye_stimuli(self.left_eye_x_pos, left_pix_x_pos), + 'right': create_eye_stimuli(self.right_eye_x_pos, right_pix_x_pos) + } + else: + return { + 'monoscopic': create_eye_stimuli(0, 0) + } + + def _present_vr_block_instructions(self, open_eye, closed_eye): + self.window.setBuffer(open_eye) + self.stim[open_eye]['vr_block_instructions'].draw() + self.stim[open_eye]['fixation'].draw() + self.window.setBuffer(closed_eye) + self.black_background.draw() + + def present_block_instructions(self, current_block: int) -> None: + if self.use_vr: + if current_block % 2 == 0: + self._present_vr_block_instructions(open_eye="left", closed_eye="right") + else: + self._present_vr_block_instructions(open_eye="right", closed_eye="left") + else: + if current_block % 2 == 0: + instruction_text = ( + "Close your right eye, then focus on the red dot with your left eye. " + "Press spacebar or controller when ready." + ) + else: + instruction_text = ( + "Close your left eye, then focus on the red dot with your right eye. " + "Press spacebar or controller when ready." + ) + text = visual.TextStim(win=self.window, text=instruction_text, color=[-1, -1, -1]) + text.draw() + self.stim['monoscopic']['fixation'].draw() + self.window.flip() + + def present_stimulus(self, idx: int): + # Get the label of the trial + trial_idx = self.current_block_index * self.block_trial_size + idx + label = self.parameter[trial_idx] + + open_eye = 'left' if label == 0 else 'right' + closed_eye = 'left' if label == 1 else 'right' + + # draw checkerboard and fixation + if self.use_vr: + self.window.setBuffer(open_eye) + self.grey_background.draw() + display = self.stim['left' if label == 0 else 'right'] + else: + self.black_background.draw() + display = self.stim['monoscopic'] + + checkerboard_frame = idx % 2 + display['checkerboards'][checkerboard_frame].draw() + display['fixation'].draw() + + if self.use_vr: + self.window.setBuffer(closed_eye) + self.black_background.draw() + + # Alternate sync patch polarity with each reversal so the photodiode + # fires on every checkerboard flip, not just odd or even frames. + if self.optode_patch is not None: + self.optode_patch.fillColor = 'white' if checkerboard_frame == 0 else 'black' + self.optode_patch.draw() + + self.window.flip() + + # Use compositor-reported predicted display time when available (VR path). + # Falls back to time() for monitor path — apply hardware lag offset in analysis. + software_time = time() + predicted_display_time = getattr(self, 'predicted_display_time', None) + if predicted_display_time is not None: + eeg_timestamp = predicted_display_time + else: + eeg_timestamp = software_time + + # Pushing the sample to the EEG + marker = self.markernames[label] + self.eeg.push_sample(marker=marker, timestamp=eeg_timestamp) + + # Log per-trial timing metadata for post-hoc validation + trial_idx = self.current_block_index * self.block_trial_size + idx + delta_ms = (predicted_display_time - software_time) * 1000 if predicted_display_time else None + self._timing_writer.writerow( + [trial_idx, software_time, predicted_display_time, delta_ms, self.use_vr] + ) + + def __del__(self): + if hasattr(self, '_timing_file') and not self._timing_file.closed: + self._timing_file.close() + + def present_iti(self): + if self.use_vr: + for eye in ['left', 'right']: + self.window.setBuffer(eye) + self.black_background.draw() + self.window.flip() diff --git a/environments/eeg-expy-docsbuild.yml b/environments/eeg-expy-docsbuild.yml index 31eae3a6e..2ef84acbf 100644 --- a/environments/eeg-expy-docsbuild.yml +++ b/environments/eeg-expy-docsbuild.yml @@ -4,9 +4,10 @@ channels: dependencies: # System-level dependencies - python>=3.8,<=3.13 + - setuptools - pytables # install pytables for macOS arm64, so do not need to build from source. - rust # used by docsbuild - pip - pip: # Install package with only Analysis requirements - - -e ..[docsbuild] \ No newline at end of file + - -e ..[docsbuild] diff --git a/environments/eeg-expy-full.yml b/environments/eeg-expy-full.yml index d3c160f01..224eb9908 100644 --- a/environments/eeg-expy-full.yml +++ b/environments/eeg-expy-full.yml @@ -4,6 +4,7 @@ channels: dependencies: # System-level dependencies - python>=3.8,<=3.10 # psychopy <= 3.10 + - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - numpy # fix PsychXR numpy dependency DLL issues on Windows - pytables # install pytables for macOS arm64, so do not need to build from source. diff --git a/environments/eeg-expy-stimpres.yml b/environments/eeg-expy-stimpres.yml index de7ed1178..069d1020b 100644 --- a/environments/eeg-expy-stimpres.yml +++ b/environments/eeg-expy-stimpres.yml @@ -4,6 +4,7 @@ channels: dependencies: # System-level dependencies - python>=3.8,<=3.10 # psychopy <= 3.10 + - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - wxpython>=4.0 # install wxpython to prevent error on macOS arm64: "site-packages/wx/_core.cpython-38-darwin.so, 0x0002): symbol not found in flat namespace '__ZN10wxBoxSizer20InformFirstDirectionEiii'" - cffi # Fix sound ffi.callback() issue with sounddevice on macOS: https://github.com/spatialaudio/python-sounddevice/issues/397 diff --git a/environments/eeg-expy-streaming.yml b/environments/eeg-expy-streaming.yml index 2b7f87af7..554dc2d3d 100644 --- a/environments/eeg-expy-streaming.yml +++ b/environments/eeg-expy-streaming.yml @@ -4,6 +4,7 @@ channels: dependencies: # System-level dependencies - python>=3.8,<=3.13 + - setuptools - liblsl # install liblsl to prevent error on macOS and Ubuntu: "RuntimeError: LSL binary library file was not found." - pip - pip: diff --git a/environments/eeg-expy-streamstim.yml b/environments/eeg-expy-streamstim.yml index 8ed52571f..e6d8b1455 100644 --- a/environments/eeg-expy-streamstim.yml +++ b/environments/eeg-expy-streamstim.yml @@ -4,6 +4,7 @@ channels: dependencies: # System-level dependencies - python>=3.8,<=3.10 # psychopy <= 3.10 + - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - liblsl # install liblsl to prevent error on macOS and Ubuntu: "RuntimeError: LSL binary library file was not found." - wxpython>=4.0 # install wxpython to prevent error on macOS arm64: "site-packages/wx/_core.cpython-38-darwin.so, 0x0002): symbol not found in flat namespace '__ZN10wxBoxSizer20InformFirstDirectionEiii'" diff --git a/requirements.txt b/requirements.txt index 001b69229..93b60bd43 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,7 +15,6 @@ pysocks>=1.7.1 pyserial>=3.5 h5py>=3.1.0 pytest-shutil -pyo>=1.0.3; platform_system == "Linux" #pynput requires pyobjc, psychopy requires a version less than 8, setting pyobjc to # a specific version prevents an endless dependency resolution loop. pyobjc==7.3; sys_platform == 'darwin' @@ -35,7 +34,6 @@ pysocks>=1.7.1 pyserial>=3.5 h5py>=3.1.0 pytest-shutil -pyo>=1.0.3; platform_system == "Linux" #pynput requires pyobjc, psychopy requires a version less than 8, setting pyobjc to # a specific version prevents an endless dependency resolution loop. pyobjc==7.3; sys_platform == 'darwin' @@ -68,7 +66,6 @@ pysocks>=1.7.1 pyserial>=3.5 h5py>=3.1.0 pytest-shutil -pyo>=1.0.3; platform_system == "Linux" airium>=0.1.0 attrdict>=2.0.1 attrdict3 @@ -87,9 +84,11 @@ pyglet==1.4.11 ; platform_system == "Windows" psychxr>=0.2.4rc2; platform_system == "Windows" and python_version <= "3.9" +# Used for generating checkerboard in pattern reversal experiment +stimupy - -## ~~ Docsbuild Requirements ~~ +## ~~ Docsbuild Requirements ~~ +setuptools # brainflow imports pkg_resources at runtime; not included by default in Python 3.10+ envs recommonmark brainflow numpydoc From 0497302231c71a7ab808eaccf9ddf0013207b2a7 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 16:16:02 +1000 Subject: [PATCH 02/94] rename VisualVEP to VisualGratingVEP and vvep.rst to vprvep.rst Future-proof VEP naming now that more VEP types will be added. --- doc/experiments/{vvep.rst => vprvep.rst} | 0 doc/index.rst | 2 +- eegnb/experiments/visual_vep/__init__.py | 4 ++-- eegnb/experiments/visual_vep/vep.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename doc/experiments/{vvep.rst => vprvep.rst} (100%) diff --git a/doc/experiments/vvep.rst b/doc/experiments/vprvep.rst similarity index 100% rename from doc/experiments/vvep.rst rename to doc/experiments/vprvep.rst diff --git a/doc/index.rst b/doc/index.rst index ffa41e26f..ccdd6f85c 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -19,7 +19,7 @@ experiments/vn170 experiments/vp300 experiments/vssvep - experiments/vvep + experiments/vprvep experiments/cueing experiments/gonogo experiments/all_examples diff --git a/eegnb/experiments/visual_vep/__init__.py b/eegnb/experiments/visual_vep/__init__.py index a6101e9a7..4410d16d3 100644 --- a/eegnb/experiments/visual_vep/__init__.py +++ b/eegnb/experiments/visual_vep/__init__.py @@ -4,7 +4,7 @@ including pattern reversal VEP for assessing the P100 component. """ -from .vep import VisualVEP +from .vep import VisualGratingVEP from .pattern_reversal_vep import VisualPatternReversalVEP -__all__ = ['VisualVEP', 'VisualPatternReversalVEP'] +__all__ = ['VisualGratingVEP', 'VisualPatternReversalVEP'] diff --git a/eegnb/experiments/visual_vep/vep.py b/eegnb/experiments/visual_vep/vep.py index 11d076cc4..c661b94c0 100644 --- a/eegnb/experiments/visual_vep/vep.py +++ b/eegnb/experiments/visual_vep/vep.py @@ -5,7 +5,7 @@ from eegnb.devices.eeg import EEG -class VisualVEP(Experiment.BaseExperiment): +class VisualGratingVEP(Experiment.BaseExperiment): def __init__(self, duration=120, eeg: Optional[EEG]=None, save_fn=None, From aae0f14b3295da968df4528456963c5ad3a86888 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 18:14:28 +1000 Subject: [PATCH 03/94] feat: add pattern reversal VEP visualization example and utility functions for peak latency analysis --- eegnb/analysis/__init__.py | 1 + eegnb/analysis/vep_utils.py | 60 ++++++ eegnb/experiments/visual_vep/__init__.py | 2 +- .../visual_vep/{vep.py => grating_vep.py} | 0 .../visual_vep/01r__pattern_reversal_viz.py | 203 ++++++++++++++++++ 5 files changed, 265 insertions(+), 1 deletion(-) create mode 100644 eegnb/analysis/vep_utils.py rename eegnb/experiments/visual_vep/{vep.py => grating_vep.py} (100%) create mode 100644 examples/visual_vep/01r__pattern_reversal_viz.py diff --git a/eegnb/analysis/__init__.py b/eegnb/analysis/__init__.py index e69de29bb..2fde929d0 100644 --- a/eegnb/analysis/__init__.py +++ b/eegnb/analysis/__init__.py @@ -0,0 +1 @@ +from eegnb.analysis import vep_utils # noqa: F401 diff --git a/eegnb/analysis/vep_utils.py b/eegnb/analysis/vep_utils.py new file mode 100644 index 000000000..424d324aa --- /dev/null +++ b/eegnb/analysis/vep_utils.py @@ -0,0 +1,60 @@ +from mne import Evoked + + +def print_latency(peak_name, peak_latency, peak_channel, uv): + peak_latency = round(peak_latency * 1e3, 2) # convert to milliseconds + uv = round(uv * 1e6, 2) # convert to µV + print('{} Peak of {} µV at {} ms in peak_channel {}'.format(peak_name, uv, peak_latency, peak_channel)) + + +def get_peak(erp_name, evoked_potential, peak_time_min, peak_time_max, mode): + # print('{} peak min {} max {}'.format(erp_name, peak_time_min, peak_time_max)) + peak_channel, peak_latency, uv = evoked_potential.get_peak(tmin=peak_time_min, + tmax=peak_time_max, + mode=mode, return_amplitude=True) + print_latency(erp_name, peak_latency, peak_channel, uv) + return peak_latency + + +def plot_vep(evoked_occipital: Evoked): + n75_peak_width = 0.05 + n75_latency = get_peak(erp_name='N75', + evoked_potential=evoked_occipital, + peak_time_min=0.06, + peak_time_max=0.075 + n75_peak_width, + mode='neg') + p100_peak_width = 0.1 + p100_latency = get_peak(erp_name='P100', + evoked_potential=evoked_occipital, + peak_time_min=n75_latency, + peak_time_max=n75_latency + p100_peak_width, + mode='pos') + n145_peak_width = 0.12 + n145_latency = get_peak(erp_name='N145', + evoked_potential=evoked_occipital, + peak_time_min=p100_latency, + peak_time_max=p100_latency + n145_peak_width, + mode='neg') + + plt = evoked_occipital.plot(spatial_colors=True, show=False) + + # Get the axes from the figure + axes = plt.get_axes() # This gets all Axes objects + + # Add vertical lines as markers to each subplot + ax = axes[0] + ax.axvline(x=0, color='r', linestyle='--', label='stim') + ax.axvline(x=0.100, color='r', linestyle='--', label='100 ms') + #ax.axvline(x=n75_latency, color='g', linestyle='-', label='n75') + ax.axvline(x=p100_latency, color='g', linestyle='-', label='p100') + #ax.axvline(x=n145_latency, color='g', linestyle='-', label='n145') + + # Add a legend to each subplot + # ax.legend() + + # plt.show() + + # Add a legend + plt.legend(loc="lower right") + + return plt diff --git a/eegnb/experiments/visual_vep/__init__.py b/eegnb/experiments/visual_vep/__init__.py index 4410d16d3..514a3492b 100644 --- a/eegnb/experiments/visual_vep/__init__.py +++ b/eegnb/experiments/visual_vep/__init__.py @@ -4,7 +4,7 @@ including pattern reversal VEP for assessing the P100 component. """ -from .vep import VisualGratingVEP +from .grating_vep import VisualGratingVEP from .pattern_reversal_vep import VisualPatternReversalVEP __all__ = ['VisualGratingVEP', 'VisualPatternReversalVEP'] diff --git a/eegnb/experiments/visual_vep/vep.py b/eegnb/experiments/visual_vep/grating_vep.py similarity index 100% rename from eegnb/experiments/visual_vep/vep.py rename to eegnb/experiments/visual_vep/grating_vep.py diff --git a/examples/visual_vep/01r__pattern_reversal_viz.py b/examples/visual_vep/01r__pattern_reversal_viz.py new file mode 100644 index 000000000..d5a188739 --- /dev/null +++ b/examples/visual_vep/01r__pattern_reversal_viz.py @@ -0,0 +1,203 @@ +""" +Pattern Reversal VEP Visualization +================================== + +This example demonstrates loading, organizing, and visualizing EP response data from the visual P100 experiment. + +An animation of a checkerboard reversal is shown (the checkerboard squares' colours are toggled once each half a second). + +The data used is the first subject and first session of one of the eeg-notebooks pattern reversal example datasets. +It was recorded using an OpenBCI Ultracortex EEG headset (Mark IV) with its last five electrodes placed in the headset's +node locations of (PO1, Oz, PO2, P3 and P4). +These headset node locations were used to fit around a Meta Quest 2 headset, which tilted/angled the headset backwards +so that the real locations of the electrodes are closer to the occipital lobe - O1, Iz, O2, PO1 and PO2. +The session consisted of using the Meta Quest 2 linked with a PC to display the checkerboard reversal animation +for thirty seconds of continuous recording. + +We first load the dataset from the specified data directory. +After loading the data from the occipital channels, we place it in an MNE `Epochs` object, and then an `Evoked` object to obtain +the trial-averaged delay of the response. + +The final figures show the P100 response EP waveform, comparison between eyes, and difference waves. +""" + +################################################################################################### +# Setup +# --------------------- + +# Some standard pythonic imports +import numpy as np +import warnings +warnings.filterwarnings('ignore') +import matplotlib.pyplot as plt +from os import path, getenv +from dotenv import load_dotenv +load_dotenv() + +# MNE functions +from mne import Epochs, find_events + +# EEG-Notebooks functions +from eegnb.analysis.utils import load_data +from eegnb.analysis import vep_utils +from eegnb.analysis.vep_utils import plot_vep + +################################################################################################### +# Hardware Lag Definitions +# --------------------- +# +# These are the known hardware offsets for different setups, to be subtracted +# from the software timestamps. +# + +def usb_lag(): + return 0.062 + +def mac_lag(): + return 0.053 + +def windows_lag(): + return 0.0142 + +def legion5slim_unicorn_quest3s_usb_lag(): + return 0.036 + +def quest_3s_usb_and_unicorn_lag(): + return 0.0368 + +def legion5slim_quest2usb_cyton_lag(): + # As an approximation since it's not in rules but used in notebooks: + return 0.036 + +# sphinx_gallery_thumbnail_number = 3 + +################################################################################################### +# Load Data +# --------------------- +# +# We will use the vtfi pattern reversal dataset. +# The data is expected to be located in the DATA_DIR defined in the .env file. +# + +assert getenv('DATA_DIR'), "DATA_DIR environment variable is not set. Set it in the .env file." + +data_dir = path.join(path.expanduser("~/"), getenv('DATA_DIR')) +raw = load_data(subject=1, session=0, + experiment='block_pattern-reversal', site='Windows_quest-3s_120Hz', device_name='unicorn', + data_dir=data_dir) + +################################################################################################### +# Visualize the power spectrum +# ---------------------------- + +raw.plot_psd() + +################################################################################################### +# Filtering +# ---------------------------- +# +# Use FIR rather than IIR to keep linear phase +# + +raw.filter(1, 30, method='fir') +raw.plot_psd(fmin=1, fmax=30) + +################################################################################################### +# Epoching +# ---------------------------- +# +# Create an array containing the timestamps and which eye was presented the stimulus, +# then epoch around those events. +# + +events = find_events(raw) +event_id = {'left_eye': 1, 'right_eye': 2} + +epochs = Epochs(raw, events=events, event_id=event_id, + tmin=-0.1, tmax=0.4, baseline=None, + reject={'eeg': 65e-6}, preload=True, + verbose=False, picks=[7]) + +# Shift time by the known hardware lag +epochs.shift_time(-windows_lag()) +print('sample drop %: ', (1 - len(epochs.events)/len(events)) * 100) + +################################################################################################### +# Epoch average +# ---------------------------- + +evoked = epochs.average() +evoked.plot(spatial_colors=True, show=False) + +evoked_potentials_left = epochs['left_eye'].average(picks=['Oz']) +plot_vep(evoked_potentials_left) + +evoked_potentials_right = epochs['right_eye'].average(picks=['Oz']) +plot_vep(evoked_potentials_right) + +################################################################################################### +# Compare evoked potentials by event type +# ---------------------------- + +evoked_left = epochs['left_eye'].average(picks=['Oz']) +evoked_right = epochs['right_eye'].average(picks=['Oz']) + +fig, ax = plt.subplots(figsize=(10, 6)) + +times = evoked_left.times * 1000 # Convert to milliseconds +left_data = evoked_left.data[0] * 1e6 # Convert to microvolts +right_data = evoked_right.data[0] * 1e6 # Convert to microvolts + +ax.plot(times, left_data, label='Left Eye', color='blue', linewidth=2) +ax.plot(times, right_data, label='Right Eye', color='red', linewidth=2) + +ax.set_xlabel('Time (ms)') +ax.set_ylabel('Amplitude (μV)') +ax.set_title('Comparison of Evoked Potentials: Left Eye vs Right Eye') +ax.legend() +ax.grid(True, alpha=0.3) +ax.axhline(y=0, color='black', linestyle='-', alpha=0.3) +ax.axvline(x=0, color='black', linestyle='--', alpha=0.5, label='Stimulus Onset') + +plt.tight_layout() +plt.show() + +# Print summary statistics +print(f"Left eye - Number of epochs: {len(epochs['left_eye'])}") +print(f"Right eye - Number of epochs: {len(epochs['right_eye'])}") + +# Find P100 peak for each condition (typically around 100ms) +p100_window = (80, 120) # milliseconds +time_mask = (times >= p100_window[0]) & (times <= p100_window[1]) + +left_p100_idx = np.argmax(left_data[time_mask]) +right_p100_idx = np.argmax(right_data[time_mask]) + +left_p100_time = times[time_mask][left_p100_idx] +left_p100_amp = left_data[time_mask][left_p100_idx] + +right_p100_time = times[time_mask][right_p100_idx] +right_p100_amp = right_data[time_mask][right_p100_idx] + +print(f"\nP100 Peak Analysis:") +print(f"Left eye - Peak at {left_p100_time:.1f}ms, amplitude: {left_p100_amp:.2f}μV") +print(f"Right eye - Peak at {right_p100_time:.1f}ms, amplitude: {right_p100_amp:.2f}μV") + +################################################################################################### +# Create difference wave +# ---------------------------- + +difference_data = left_data - right_data + +fig, ax = plt.subplots(figsize=(10, 6)) +ax.plot(times, difference_data, label='Left - Right', color='green', linewidth=2) +ax.set_xlabel('Time (ms)') +ax.set_ylabel('Amplitude Difference (μV)') +ax.set_title('Difference Wave: Left Eye - Right Eye') +ax.grid(True, alpha=0.3) +ax.axhline(y=0, color='black', linestyle='-', alpha=0.3) +ax.axvline(x=0, color='black', linestyle='--', alpha=0.5, label='Stimulus Onset') +ax.legend() + +plt.tight_layout() +plt.show() From 31b89945676095a331f10448d09657b566b961f9 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 18:35:37 +1000 Subject: [PATCH 04/94] feat: add Cyton config constants and PRVEP run experiment example --- eegnb/devices/__init__.py | 8 ++ eegnb/devices/utils.py | 37 ++++++ .../00x__pattern_reversal_run_experiment.py | 123 ++++++++++++++++++ examples/visual_vep/README.txt | 1 + 4 files changed, 169 insertions(+) create mode 100644 examples/visual_vep/00x__pattern_reversal_run_experiment.py create mode 100644 examples/visual_vep/README.txt diff --git a/eegnb/devices/__init__.py b/eegnb/devices/__init__.py index e69de29bb..3b0919c63 100644 --- a/eegnb/devices/__init__.py +++ b/eegnb/devices/__init__.py @@ -0,0 +1,8 @@ +from eegnb.devices.utils import ( # noqa: F401 + CYTON_CONFIG_GAIN_1X, + CYTON_CONFIG_GAIN_2X, + CYTON_CONFIG_GAIN_4X, + CYTON_CONFIG_GAIN_6X, + CYTON_CONFIG_GAIN_12X, + CYTON_CONFIG_GAIN_24X, +) diff --git a/eegnb/devices/utils.py b/eegnb/devices/utils.py index c804befd0..d2075be13 100644 --- a/eegnb/devices/utils.py +++ b/eegnb/devices/utils.py @@ -90,6 +90,43 @@ } + +# --------------------------------------------------------------------------- +# Cyton board channel configuration presets +# --------------------------------------------------------------------------- +# Each channel command has the format: x N P G I B S1 S2 X +# N = channel number (1-8) +# P = power (0=ON, 1=OFF) +# G = gain (0=1×, 1=2×, 2=4×, 3=6×, 4=12×, 5=24×) +# I = input type (0=normal EEG, 1=shorted, ...) +# B = include in BIAS derivation (1=yes) +# S2 = SRB2 connection (1=connected) +# S1 = SRB1 connection (0=disconnected) +# +# Build a config string by joining per-channel strings — applied with +# EEG(device='cyton', config=CYTON_CONFIG_GAIN_12X). + +def _cyton_ch_config(gain_code: int, n_channels: int = 8) -> str: + """Build a Cyton channel-settings string for all channels. + + Args: + gain_code: BrainFlow gain code (0=1×, 1=2×, 2=4×, 3=6×, 4=12×, 5=24×). + n_channels: Number of channels to configure (default 8 for standard Cyton). + + Returns: + Config string ready to pass to ``EEG(config=...)``. + """ + return "".join(f"x{ch}{gain_code}0110X" for ch in range(1, n_channels + 1)) + +# Standard gain presets — normal EEG input, bias enabled, SRB2 on, SRB1 off. +CYTON_CONFIG_GAIN_1X = _cyton_ch_config(0) # 1× (for strong signals / testing) +CYTON_CONFIG_GAIN_2X = _cyton_ch_config(1) # 2× +CYTON_CONFIG_GAIN_4X = _cyton_ch_config(2) # 4× +CYTON_CONFIG_GAIN_6X = _cyton_ch_config(3) # 6× +CYTON_CONFIG_GAIN_12X = _cyton_ch_config(4) # 12× — good general-purpose EEG config +CYTON_CONFIG_GAIN_24X = _cyton_ch_config(5) # 24× — for very quiet environments + + def create_stim_array(timestamps, markers): """Creates a stim array which is the lenmgth of the EEG data where the stimuli are lined up with their corresponding EEG sample. diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py new file mode 100644 index 000000000..95cd83b03 --- /dev/null +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -0,0 +1,123 @@ +""" +PRVEP Run Experiment +=============================== + +This example demonstrates the initiation of an EEG stream with eeg-expy, +and how to run the Pattern Reversal VEP (PRVEP) experiment. + +The experiment presents a checkerboard that reverses its black and white squares +at 2 reversals per second, while the participant fixates a central dot. +Each reversal elicits a P100 response at occipital electrodes. + +The experiment supports both standard monitor presentation and Meta Quest VR +presentation via ``use_vr=True``. VR mode is preferred as it provides monocular +stimulation per eye without manual eye closure, and uses compositor-predicted +photon timestamps for improved timing accuracy. + +""" + +################################################################################################### +# Setup +# --------------------- +# +# Imports + +import platform +from os import path, getenv +from dotenv import load_dotenv +load_dotenv() + +from eegnb import generate_save_fn +from eegnb.devices import CYTON_CONFIG_GAIN_12X +from eegnb.devices.eeg import EEG +from eegnb.experiments.visual_vep import VisualPatternReversalVEP + +################################################################################################### +# Configuration +# --------------------- +# +# Set your experiment parameters here before running. +# + +# Set debug=True to use a synthetic EEG device (no hardware needed) +debug = False + +# Display: set use_vr=True for Meta Quest, False for monitor +use_vr = False +use_fullscr = True + +# Device: "cyton", "unicorn", "muse2", etc. +device_name = "cyton" +serial_num = "UN-2022.04.23" + +# Electrode montage type: "cap", "individual", "mark-iv", or "think-pulse" +montage_type = "think-pulse" + +# Subject and session identifiers +subject_id = 1 +session_nb = 0 + +################################################################################################### +# Initiate EEG device +# --------------------- +# +# Start EEG device based on configuration above. + +serial_port = None +if device_name == "cyton": + serial_port = "COM3" if platform.system() == "Windows" else "/dev/cu.usbserial-DM03H289" + +if debug: + eeg_device = EEG(device="synthetic") +elif device_name == "cyton": + if montage_type in ("cap", "individual"): + ch_names = ["Fz", "Cz", "Fp1", "Fp2", "O1", "O2", "Pz", "Oz"] + elif montage_type in ("mark-iv", "think-pulse"): + ch_names = ["Fp1", "Fp2", "C1", "C2", "O1", "O2", "POz", "Oz"] + else: + ch_names = None + eeg_device = EEG(device=device_name, serial_port=serial_port, + serial_num=serial_num, ch_names=ch_names, + config=CYTON_CONFIG_GAIN_12X) +else: + eeg_device = EEG(device=device_name, serial_port=serial_port, serial_num=serial_num) + +################################################################################################### +# Display and save path setup +# --------------------- + +if use_vr: + refresh_rate = 120 + display = "quest-2_{}Hz".format(refresh_rate) +else: + refresh_rate = 100 + display = "acer-34-predator_{}Hz".format(refresh_rate) + +metadata = montage_type +site = "{}_{}".format(platform.system(), display) + +data_dir = path.join(path.expanduser("~/"), getenv("DATA_DIR"), "vtfi/data") +save_fn = generate_save_fn(eeg_device.device_name, + experiment="block_pattern-reversal", + site="{}_{}".format(site, metadata), + subject_id=subject_id, + session_nb=session_nb, + data_dir=data_dir) +print(save_fn) + +################################################################################################### +# Run experiment +# --------------------- +# +# Run the Pattern Reversal VEP. The experiment will present alternating checkerboard +# blocks for each eye (or for both eyes on monitor). Press spacebar/controller trigger +# at each block instruction prompt to begin that block. + +pattern_reversal_vep = VisualPatternReversalVEP( + display_refresh_rate=refresh_rate, + eeg=eeg_device, + save_fn=save_fn, + use_fullscr=use_fullscr, + use_vr=use_vr +) +pattern_reversal_vep.run() diff --git a/examples/visual_vep/README.txt b/examples/visual_vep/README.txt new file mode 100644 index 000000000..e201880e7 --- /dev/null +++ b/examples/visual_vep/README.txt @@ -0,0 +1 @@ +Visual VEP From d6f2470257177ca929de1f632b9b73c586c6db6f Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 19:28:09 +1000 Subject: [PATCH 05/94] fix docs build: add python-dotenv to docsbuild requirements --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 93b60bd43..d5188e735 100644 --- a/requirements.txt +++ b/requirements.txt @@ -89,6 +89,7 @@ stimupy ## ~~ Docsbuild Requirements ~~ setuptools # brainflow imports pkg_resources at runtime; not included by default in Python 3.10+ envs +python-dotenv recommonmark brainflow numpydoc From cfd47b14aed1f84c594a38e99c9082f8b2eb230a Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 20:11:54 +1000 Subject: [PATCH 06/94] prepare PR-VEP example for fetch_dataset; exclude from CI until data uploaded - Add visual-PRVEP to datasets.py with None placeholder gdrive ID - fetch_dataset raises a clear error if gdrive ID is missing - Rewrite example to use fetch_dataset instead of dotenv/DATA_DIR - Add visual_vep to sphinx-gallery examples_dirs/gallery_dirs - Exclude visual_vep examples from execution until dataset is on Drive (TODO comment) --- doc/conf.py | 7 +- eegnb/datasets/datasets.py | 8 ++ .../visual_vep/01r__pattern_reversal_viz.py | 133 +++++++----------- 3 files changed, 65 insertions(+), 83 deletions(-) diff --git a/doc/conf.py b/doc/conf.py index c449ea6fc..a316e06a2 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -255,9 +255,10 @@ def setup(app): # Configurations for sphinx gallery -sphinx_gallery_conf = {'filename_pattern': '(?=.*r__)(?=.*.py)', - 'examples_dirs': ['../examples','../examples/visual_n170', '../examples/visual_p300','../examples/visual_ssvep', '../examples/visual_cueing', '../examples/visual_gonogo'], - 'gallery_dirs': ['auto_examples','auto_examples/visual_n170', 'auto_examples/visual_p300','auto_examples/visual_ssvep', 'auto_examples/visual_cueing', 'auto_examples/visual_gonogo'], +sphinx_gallery_conf = {'filename_pattern': '(?=.*r__)(?=.*.py)', + 'ignore_pattern': r'visual_vep/.*\.py', # TODO: remove once PR-VEP example dataset is uploaded to Google Drive + 'examples_dirs': ['../examples','../examples/visual_n170', '../examples/visual_p300','../examples/visual_ssvep', '../examples/visual_cueing', '../examples/visual_gonogo', '../examples/visual_vep'], + 'gallery_dirs': ['auto_examples','auto_examples/visual_n170', 'auto_examples/visual_p300','auto_examples/visual_ssvep', 'auto_examples/visual_cueing', 'auto_examples/visual_gonogo', 'auto_examples/visual_vep'], 'within_subsection_order': FileNameSortKey, 'default_thumb_file': 'img/eeg-notebooks_logo.png', 'backreferences_dir': 'generated', # Where to drop linking files between examples & API diff --git a/eegnb/datasets/datasets.py b/eegnb/datasets/datasets.py index 21add031c..16b462b00 100644 --- a/eegnb/datasets/datasets.py +++ b/eegnb/datasets/datasets.py @@ -54,10 +54,12 @@ def fetch_dataset( "visual-P300", "visual-spatialfreq", "visual-SSVEP", + "visual-PRVEP", ] # List gdrive extensions for various experiments gdrive_locs = { + "visual-PRVEP": None, # TODO: upload example dataset to Google Drive and paste the file ID here "visual-SSVEP": "1zj9Wx-YEMJo7GugUUu7Sshcybfsr-Fze", "visual-spatialfreq": "1ggBt7CNvMgddxji-FvxcZoP-IF-PmESX", "visual-P300": "1OLcj-zSjqdNrsBSUAsGBXOwWDnGWTVFC", @@ -84,6 +86,12 @@ def fetch_dataset( download_it = True if download_it: + if gdrive_locs.get(experiment) is None: + raise ValueError( + f"No example dataset available for '{experiment}' yet. " + "Upload a zip to Google Drive and add the file ID to gdrive_locs in datasets.py." + ) + # check if data directory exits. If not, create it if os.path.exists(data_dir) is not True: os.makedirs(data_dir) diff --git a/examples/visual_vep/01r__pattern_reversal_viz.py b/examples/visual_vep/01r__pattern_reversal_viz.py index d5a188739..940308d37 100644 --- a/examples/visual_vep/01r__pattern_reversal_viz.py +++ b/examples/visual_vep/01r__pattern_reversal_viz.py @@ -2,89 +2,76 @@ Pattern Reversal VEP Visualization ================================== -This example demonstrates loading, organizing, and visualizing EP response data from the visual P100 experiment. +This example demonstrates loading, organizing, and visualizing EP response data +from the visual Pattern Reversal VEP (PR-VEP) experiment. -An animation of a checkerboard reversal is shown (the checkerboard squares' colours are toggled once each half a second). +An animation of a checkerboard reversal is shown (the checkerboard squares' +colours are toggled once each half a second). -The data used is the first subject and first session of one of the eeg-notebooks pattern reversal example datasets. -It was recorded using an OpenBCI Ultracortex EEG headset (Mark IV) with its last five electrodes placed in the headset's -node locations of (PO1, Oz, PO2, P3 and P4). -These headset node locations were used to fit around a Meta Quest 2 headset, which tilted/angled the headset backwards -so that the real locations of the electrodes are closer to the occipital lobe - O1, Iz, O2, PO1 and PO2. -The session consisted of using the Meta Quest 2 linked with a PC to display the checkerboard reversal animation -for thirty seconds of continuous recording. +The data used is the first subject and first session of the eeg-expy PR-VEP +example dataset, recorded using a g.tec Unicorn EEG headset with electrodes +placed at occipital locations (O1, Iz, O2, PO1, PO2) fitted around a Meta +Quest 3S headset. The session used the Meta Quest 3S linked with a PC to +display the checkerboard reversal animation in VR, alternating monocular +stimulation between left and right eye across blocks. -We first load the dataset from the specified data directory. -After loading the data from the occipital channels, we place it in an MNE `Epochs` object, and then an `Evoked` object to obtain -the trial-averaged delay of the response. +We first use ``fetch_dataset`` to obtain the data files. If the files are not +already present in the local data directory they will be downloaded from the +cloud. + +After loading the data from the occipital channels, we place it in an MNE +``Epochs`` object, and then an ``Evoked`` object to obtain the trial-averaged +response. The final figures show the P100 response ERP waveform, a comparison +between eyes, and the interocular difference wave. -The final figures show the P100 response EP waveform, comparison between eyes, and difference waves. """ ################################################################################################### # Setup -# --------------------- +# ----- -# Some standard pythonic imports +import os import numpy as np import warnings warnings.filterwarnings('ignore') import matplotlib.pyplot as plt -from os import path, getenv -from dotenv import load_dotenv -load_dotenv() -# MNE functions from mne import Epochs, find_events -# EEG-Notebooks functions from eegnb.analysis.utils import load_data from eegnb.analysis import vep_utils from eegnb.analysis.vep_utils import plot_vep +from eegnb.datasets import fetch_dataset + +# sphinx_gallery_thumbnail_number = 3 ################################################################################################### -# Hardware Lag Definitions -# --------------------- +# Hardware lag definitions +# ------------------------ # -# These are the known hardware offsets for different setups, to be subtracted -# from the software timestamps. +# Known display-pipeline offsets for different setups, subtracted from software +# timestamps so that t=0 corresponds to actual photon delivery. # -def usb_lag(): - return 0.062 - -def mac_lag(): - return 0.053 - -def windows_lag(): - return 0.0142 - -def legion5slim_unicorn_quest3s_usb_lag(): - return 0.036 - -def quest_3s_usb_and_unicorn_lag(): +def windows_quest3s_usb_unicorn_lag(): return 0.0368 -def legion5slim_quest2usb_cyton_lag(): - # As an approximation since it's not in rules but used in notebooks: - return 0.036 - -# sphinx_gallery_thumbnail_number = 3 - ################################################################################################### # Load Data -# --------------------- +# --------- # -# We will use the vtfi pattern reversal dataset. -# The data is expected to be located in the DATA_DIR defined in the .env file. +# Download the PR-VEP example dataset if it is not already present locally. # -assert getenv('DATA_DIR'), "DATA_DIR environment variable is not set. Set it in the .env file." +eegnb_data_path = os.path.join(os.path.expanduser('~/'), '.eegnb', 'data') +prvep_data_path = os.path.join(eegnb_data_path, 'visual-PRVEP', 'eegnb_examples') + +if not os.path.isdir(prvep_data_path): + fetch_dataset(data_dir=eegnb_data_path, experiment='visual-PRVEP', site='eegnb_examples') -data_dir = path.join(path.expanduser("~/"), getenv('DATA_DIR')) raw = load_data(subject=1, session=0, - experiment='block_pattern-reversal', site='Windows_quest-3s_120Hz', device_name='unicorn', - data_dir=data_dir) + experiment='visual-PRVEP', site='eegnb_examples', device_name='unicorn', + data_dir=eegnb_data_path) ################################################################################################### # Visualize the power spectrum @@ -94,9 +81,9 @@ def legion5slim_quest2usb_cyton_lag(): ################################################################################################### # Filtering -# ---------------------------- +# --------- # -# Use FIR rather than IIR to keep linear phase +# Use FIR rather than IIR to keep linear phase. # raw.filter(1, 30, method='fir') @@ -104,10 +91,9 @@ def legion5slim_quest2usb_cyton_lag(): ################################################################################################### # Epoching -# ---------------------------- +# -------- # -# Create an array containing the timestamps and which eye was presented the stimulus, -# then epoch around those events. +# Epoch around stimulus onsets, separating left- and right-eye trials. # events = find_events(raw) @@ -118,13 +104,12 @@ def legion5slim_quest2usb_cyton_lag(): reject={'eeg': 65e-6}, preload=True, verbose=False, picks=[7]) -# Shift time by the known hardware lag -epochs.shift_time(-windows_lag()) +epochs.shift_time(-windows_quest3s_usb_unicorn_lag()) print('sample drop %: ', (1 - len(epochs.events)/len(events)) * 100) ################################################################################################### # Epoch average -# ---------------------------- +# ------------- evoked = epochs.average() evoked.plot(spatial_colors=True, show=False) @@ -136,21 +121,19 @@ def legion5slim_quest2usb_cyton_lag(): plot_vep(evoked_potentials_right) ################################################################################################### -# Compare evoked potentials by event type -# ---------------------------- +# Compare evoked potentials by eye +# --------------------------------- evoked_left = epochs['left_eye'].average(picks=['Oz']) evoked_right = epochs['right_eye'].average(picks=['Oz']) fig, ax = plt.subplots(figsize=(10, 6)) - -times = evoked_left.times * 1000 # Convert to milliseconds -left_data = evoked_left.data[0] * 1e6 # Convert to microvolts -right_data = evoked_right.data[0] * 1e6 # Convert to microvolts +times = evoked_left.times * 1000 +left_data = evoked_left.data[0] * 1e6 +right_data = evoked_right.data[0] * 1e6 ax.plot(times, left_data, label='Left Eye', color='blue', linewidth=2) ax.plot(times, right_data, label='Right Eye', color='red', linewidth=2) - ax.set_xlabel('Time (ms)') ax.set_ylabel('Amplitude (μV)') ax.set_title('Comparison of Evoked Potentials: Left Eye vs Right Eye') @@ -158,34 +141,25 @@ def legion5slim_quest2usb_cyton_lag(): ax.grid(True, alpha=0.3) ax.axhline(y=0, color='black', linestyle='-', alpha=0.3) ax.axvline(x=0, color='black', linestyle='--', alpha=0.5, label='Stimulus Onset') - plt.tight_layout() plt.show() -# Print summary statistics print(f"Left eye - Number of epochs: {len(epochs['left_eye'])}") print(f"Right eye - Number of epochs: {len(epochs['right_eye'])}") -# Find P100 peak for each condition (typically around 100ms) -p100_window = (80, 120) # milliseconds +p100_window = (80, 120) time_mask = (times >= p100_window[0]) & (times <= p100_window[1]) left_p100_idx = np.argmax(left_data[time_mask]) right_p100_idx = np.argmax(right_data[time_mask]) -left_p100_time = times[time_mask][left_p100_idx] -left_p100_amp = left_data[time_mask][left_p100_idx] - -right_p100_time = times[time_mask][right_p100_idx] -right_p100_amp = right_data[time_mask][right_p100_idx] - print(f"\nP100 Peak Analysis:") -print(f"Left eye - Peak at {left_p100_time:.1f}ms, amplitude: {left_p100_amp:.2f}μV") -print(f"Right eye - Peak at {right_p100_time:.1f}ms, amplitude: {right_p100_amp:.2f}μV") +print(f"Left eye - Peak at {times[time_mask][left_p100_idx]:.1f}ms, amplitude: {left_data[time_mask][left_p100_idx]:.2f}μV") +print(f"Right eye - Peak at {times[time_mask][right_p100_idx]:.1f}ms, amplitude: {right_data[time_mask][right_p100_idx]:.2f}μV") ################################################################################################### -# Create difference wave -# ---------------------------- +# Interocular difference wave +# --------------------------- difference_data = left_data - right_data @@ -198,6 +172,5 @@ def legion5slim_quest2usb_cyton_lag(): ax.axhline(y=0, color='black', linestyle='-', alpha=0.3) ax.axvline(x=0, color='black', linestyle='--', alpha=0.5, label='Stimulus Onset') ax.legend() - plt.tight_layout() plt.show() From b84d736ef467ce590cfa36513530ee674fa528ec Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 20:22:27 +1000 Subject: [PATCH 07/94] fix analysis/utils.py imports: lazy-load EEG and pynput to unblock docsbuild --- eegnb/analysis/utils.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/eegnb/analysis/utils.py b/eegnb/analysis/utils.py index d9450981d..c011704ab 100644 --- a/eegnb/analysis/utils.py +++ b/eegnb/analysis/utils.py @@ -5,7 +5,10 @@ import sys from collections import OrderedDict from glob import glob -from typing import Union, List +from typing import TYPE_CHECKING, Union, List + +if TYPE_CHECKING: + from eegnb.devices.eeg import EEG from time import sleep, time import os @@ -23,9 +26,11 @@ from scipy.signal import lfilter, lfilter_zi from eegnb import _get_recording_dir -from eegnb.devices.eeg import EEG from eegnb.devices.utils import EEG_INDICES, SAMPLE_FREQS -from pynput import keyboard +try: + from pynput import keyboard +except ImportError: + keyboard = None # this should probably not be done here sns.set_context("talk") From 13994913ab4b877e9913c061920cda27d8c1fd3c Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 20:40:49 +1000 Subject: [PATCH 08/94] fix NameError: add __future__ annotations to defer EEG type annotation evaluation --- eegnb/analysis/utils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eegnb/analysis/utils.py b/eegnb/analysis/utils.py index c011704ab..12690222f 100644 --- a/eegnb/analysis/utils.py +++ b/eegnb/analysis/utils.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import copy from copy import deepcopy import math From d0a2ac64621ed562af9d23e0ea3025df24c7d8fb Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 20:46:02 +1000 Subject: [PATCH 09/94] fix docs CI: remove root examples dir and visual_vep from gallery until dataset available --- doc/conf.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/conf.py b/doc/conf.py index a316e06a2..4982fc9ff 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -256,9 +256,8 @@ def setup(app): # Configurations for sphinx gallery sphinx_gallery_conf = {'filename_pattern': '(?=.*r__)(?=.*.py)', - 'ignore_pattern': r'visual_vep/.*\.py', # TODO: remove once PR-VEP example dataset is uploaded to Google Drive - 'examples_dirs': ['../examples','../examples/visual_n170', '../examples/visual_p300','../examples/visual_ssvep', '../examples/visual_cueing', '../examples/visual_gonogo', '../examples/visual_vep'], - 'gallery_dirs': ['auto_examples','auto_examples/visual_n170', 'auto_examples/visual_p300','auto_examples/visual_ssvep', 'auto_examples/visual_cueing', 'auto_examples/visual_gonogo', 'auto_examples/visual_vep'], + 'examples_dirs': ['../examples/visual_n170', '../examples/visual_p300','../examples/visual_ssvep', '../examples/visual_cueing', '../examples/visual_gonogo'], + 'gallery_dirs': ['auto_examples/visual_n170', 'auto_examples/visual_p300','auto_examples/visual_ssvep', 'auto_examples/visual_cueing', 'auto_examples/visual_gonogo'], 'within_subsection_order': FileNameSortKey, 'default_thumb_file': 'img/eeg-notebooks_logo.png', 'backreferences_dir': 'generated', # Where to drop linking files between examples & API From a066755f48bb3b8b177fef06ec064ace46f8b3b9 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 20:53:09 +1000 Subject: [PATCH 10/94] docs: update PR-VEP intro to reference Cyton and electrode placement --- doc/experiments/vprvep.rst | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index e8da1e58f..6ffccc64b 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -14,10 +14,12 @@ positive deflection occurring ~100ms after the reversal at midline occipital electrodes. The other components are a small N75 before it and an N145 after it. -In this notebook, we will attempt to detect the P100 with the Muse -headband (plus an extra electrode at Oz) using monocular pattern -reversal blocks, and run the analysis pipeline to pull out the per-eye -P100 latency and the interocular latency difference. +In this notebook, we will attempt to detect the P100 with the OpenBCI +Cyton, with the most critical electrode at Oz, followed by O1 and O2, +then POz. Fp1 and Fp2 are optional channels for detecting eye movement +artefacts. We use monocular pattern reversal blocks and run the analysis +pipeline to pull out the per-eye P100 latency and the interocular +latency difference. Stimulus Parameters From 270a197a5872dad660707fec3f83c583de5ba05b Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 20:58:50 +1000 Subject: [PATCH 11/94] docs: update PR-VEP electrode placement section for Cyton --- doc/experiments/vprvep.rst | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index 6ffccc64b..f0e7b9972 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -68,18 +68,14 @@ up yet. Electrode Placement ------------------- -The P100 is generated in occipital cortex, so the electrode that -matters is **Oz**. The Muse's default electrodes (TP9, TP10, AF7, AF8) -will pick up a blurry attenuated version of the response but are badly -placed for the actual peak. - -**Muse users: use the extra-electrode mod and place the external -electrode at Oz.** POz is an acceptable fallback if Oz is mechanically -awkward. See the :doc:`../misc/using_an_extra_electrod_with_the_muse` -page for build details. - -For full-cap devices (OpenBCI, g.tec Unicorn, etc.), use Oz as primary -and add any of O1/O2/POz/PO3/PO4 you have channels for. +The P100 is generated in occipital cortex. Priority electrode placement +for the OpenBCI Cyton is: + +1. **Oz** — the primary electrode; highest amplitude P100 +2. **O1, O2** — lateral occipital; provide left/right asymmetry information +3. **POz** — parieto-occipital midline; useful fallback or supplement +4. **Fp1, Fp2** — optional; placed on the forehead to record eye movement + artefacts (EOG) for rejection during analysis Timing Notes From b67fc9aa060a80148d121ff9858bab70d3812af5 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 21:02:57 +1000 Subject: [PATCH 12/94] ci: deploy docs on dev/* branches as well as master --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index f7064ff92..090a8b1f8 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -60,7 +60,7 @@ jobs: - name: Deploy Docs uses: peaceiris/actions-gh-pages@v3 - if: github.ref == 'refs/heads/master' + if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/dev/') with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: doc/_build/html From 4fd9de6e9c30f357147973c29e4f8ec85dd6cd79 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 21:11:59 +1000 Subject: [PATCH 13/94] docs: replace remaining Muse references with Cyton in PR-VEP docs --- doc/experiments/vprvep.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index f0e7b9972..9bae3946f 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -83,10 +83,10 @@ Timing Notes Measured P100 latency is the true P100 latency plus the display-pipeline delay, plus the EEG device's input delay, plus any clock-alignment -error. For a Muse the device delay alone is ~30–50ms, so if you need -*absolute* latencies you need to characterise and subtract it; for -*relative* comparisons (between-eye, within-subject across sessions) it -cancels out and you can ignore it. +error. For the Cyton the USB-serial latency is typically ~30–40ms, so +if you need *absolute* latencies you need to characterise and subtract +it; for *relative* comparisons (between-eye, within-subject across +sessions) it cancels out and you can ignore it. Two sidecar files are written alongside each recording to let you check timing after the fact: @@ -110,7 +110,7 @@ Running the Experiment from eegnb.devices.eeg import EEG from eegnb.experiments.visual_vep import VisualPatternReversalVEP - eeg = EEG(device='muse2') + eeg = EEG(device='cyton') experiment = VisualPatternReversalVEP( display_refresh_rate=60, # must match display and be divisible by 2Hz eeg=eeg, From 46950bff91bf69364e2c8081aa1002b36fa7d7b1 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 12 Apr 2026 21:17:15 +1000 Subject: [PATCH 14/94] docs: document refresh rate requirements and effect on P100 latency precision --- doc/experiments/vprvep.rst | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index 9bae3946f..7ebc95348 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -28,7 +28,7 @@ Stimulus Parameters Parameters follow the ISCEV "large check" option [Odom2016]_: - **Check size**: 1° of visual angle (0.5 cpd) -- **Reversal rate**: 2 reversals per second +- **Reversal rate**: 2 reversals per second (one reversal per two display frames) - **Field size**: 16° (monitor) / 20° (VR) - **Contrast**: High contrast black/white, mean luminance held constant - **Fixation**: Central red dot @@ -37,6 +37,16 @@ Parameters follow the ISCEV "large check" option [Odom2016]_: Four blocks of 50 seconds by default, giving ~100 reversals per eye per block. +The experiment requires a display refresh rate that is divisible by two, +since each reversal occupies exactly two frames. Any such refresh rate is +supported — 60 Hz, 90 Hz, 120 Hz, 144 Hz, etc. A higher refresh rate +reduces the temporal jitter between the true reversal onset and the +nearest frame boundary, which directly translates to more precise P100 +latency estimates. For example, at 60 Hz each frame is ~16.7 ms wide, +whereas at 120 Hz it is ~8.3 ms — halving the worst-case timing error. +VR headsets running at 90 Hz or above are therefore preferred over a +standard 60 Hz monitor when absolute latency precision matters. + Monitor vs VR ------------- @@ -112,7 +122,7 @@ Running the Experiment eeg = EEG(device='cyton') experiment = VisualPatternReversalVEP( - display_refresh_rate=60, # must match display and be divisible by 2Hz + display_refresh_rate=60, # must match display and be divisible by 2; higher rates give better latency precision eeg=eeg, save_fn='my_vep_recording.csv', use_vr=True, # False for monitor mode From 07934c861f8859259f72cd5e145c00e34e658687 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 13 Apr 2026 19:51:19 +1000 Subject: [PATCH 15/94] docs: restructure PR-VEP page and add visual correction section - Move intro + examples include to top (matching other experiment pages) - Move Running the Experiment up as quick-start - Add Participant Preparation section on glasses/contacts requirement - Detail sections (stimulus, VR, electrodes, timing) follow as reference --- doc/experiments/vprvep.rst | 58 ++++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index 7ebc95348..bae30cad1 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -22,6 +22,46 @@ pipeline to pull out the per-eye P100 latency and the interocular latency difference. +**PR-VEP Experiment Notebook Examples:** + +.. include:: ../auto_examples/visual_vep/index.rst + + +Running the Experiment +---------------------- + +.. code-block:: python + + from eegnb.devices.eeg import EEG + from eegnb.experiments.visual_vep import VisualPatternReversalVEP + + eeg = EEG(device='cyton') + experiment = VisualPatternReversalVEP( + display_refresh_rate=60, # must match display and be divisible by 2; higher rates give better latency precision + eeg=eeg, + save_fn='my_vep_recording.csv', + use_vr=True, # False for monitor mode + ) + experiment.run() + + +Participant Preparation +----------------------- + +The PR-VEP is sensitive to the optical quality of the retinal image. +Participants who normally wear glasses or contact lenses **must** wear +their corrective lenses during the test. Uncorrected refractive error +blurs the checkerboard's high spatial frequency edges, which attenuates +the P100 amplitude and can increase its latency — mimicking a genuine +neural conduction delay. This is especially important when comparing +latencies between eyes or across sessions. + +ISCEV guidelines require that visual acuity be documented for each +recording session. If a participant's corrected acuity is worse than +6/9 (20/30), note it alongside the data so that downstream analysis can +account for it. + + Stimulus Parameters ------------------- @@ -112,24 +152,6 @@ the chance of a dropped frame during a critical flip. Both are reset between blocks. -Running the Experiment ----------------------- - -.. code-block:: python - - from eegnb.devices.eeg import EEG - from eegnb.experiments.visual_vep import VisualPatternReversalVEP - - eeg = EEG(device='cyton') - experiment = VisualPatternReversalVEP( - display_refresh_rate=60, # must match display and be divisible by 2; higher rates give better latency precision - eeg=eeg, - save_fn='my_vep_recording.csv', - use_vr=True, # False for monitor mode - ) - experiment.run() - - API Reference ------------- From 94578178b2a66bc1917f87c55396712ef793ff7c Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 13 Apr 2026 19:55:10 +1000 Subject: [PATCH 16/94] docs: remove API Reference section from PR-VEP page for consistency --- doc/experiments/vprvep.rst | 9 --------- 1 file changed, 9 deletions(-) diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index bae30cad1..5d750c4f5 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -152,15 +152,6 @@ the chance of a dropped frame during a critical flip. Both are reset between blocks. -API Reference -------------- - -.. autoclass:: eegnb.experiments.visual_vep.VisualPatternReversalVEP - :members: - :undoc-members: - :show-inheritance: - - References ---------- From a2670dfd296f17ef92655396680feaf385df44bf Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 13 Apr 2026 21:50:32 +1000 Subject: [PATCH 17/94] docs: set PR-VEP example refresh rate to 120 Hz for Quest 2 --- doc/experiments/vprvep.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index 5d750c4f5..515198f40 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -37,7 +37,7 @@ Running the Experiment eeg = EEG(device='cyton') experiment = VisualPatternReversalVEP( - display_refresh_rate=60, # must match display and be divisible by 2; higher rates give better latency precision + display_refresh_rate=120, # must match display and be divisible by 2; higher rates give better latency precision eeg=eeg, save_fn='my_vep_recording.csv', use_vr=True, # False for monitor mode From 2940599af69e9ef16850733e48953f5a0f6cbbaa Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 13 Apr 2026 22:12:04 +1000 Subject: [PATCH 18/94] feat: sub-sample P100 peak interpolation and high-precision defaults Add parabolic interpolation to get_peak() for ~0.5ms latency resolution at 250 Hz sampling rate. Increase default blocks from 4 to 8 (400 reversals per eye). Add Latency Resolution section to PR-VEP docs. --- doc/experiments/vprvep.rst | 36 +++++++++- eegnb/analysis/vep_utils.py | 72 ++++++++++++++----- .../visual_vep/pattern_reversal_vep.py | 2 +- 3 files changed, 88 insertions(+), 22 deletions(-) diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index 515198f40..f8dc0c541 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -74,8 +74,8 @@ Parameters follow the ISCEV "large check" option [Odom2016]_: - **Fixation**: Central red dot - **Recording**: Monocular, alternating left and right eye per block -Four blocks of 50 seconds by default, giving ~100 reversals per eye per -block. +Eight blocks of 50 seconds by default, giving ~100 reversals per eye per +block (400 per eye total). The experiment requires a display refresh rate that is divisible by two, since each reversal occupies exactly two frames. Any such refresh rate is @@ -103,7 +103,7 @@ Quest (VR) presentation via ``use_vr=True``. marker in place of ``time.time()``. This cancels most of the output-side display latency — render queue, compositor buffering, scan-out, HMD persistence — on a per-frame basis, which matters for - P100 latency where shifts of 10–20ms are meaningful. + P100 latency where even small shifts are clinically meaningful. In monitor mode the software marker is the only timing source, so any fixed display-pipeline latency has to be handled separately (see below). @@ -128,6 +128,36 @@ for the OpenBCI Cyton is: artefacts (EOG) for rejection during analysis +Latency Resolution +------------------ + +The precision of a P100 latency estimate depends on three factors: + +1. **Display refresh rate** — determines the worst-case stimulus timing + jitter (see *Stimulus Parameters* above). At 120 Hz this is ~4.2 ms + per frame. + +2. **EEG sampling rate** — the Cyton samples at 250 Hz, giving 4 ms + between samples. Without interpolation, the peak latency is locked to + the nearest sample and cannot resolve shifts smaller than 4 ms. + +3. **Number of trials** — averaging more reversals reduces noise in the + ERP waveform, tightening the confidence interval around the peak + estimate. The default is 8 blocks of 100 reversals (400 per eye). + +To achieve sub-sample precision the analysis pipeline uses **parabolic +interpolation**: a parabola is fitted through the peak sample and its +two neighbours, and the vertex of the fit is taken as the true peak +location. At 250 Hz this brings effective resolution to ~0.5 ms — well +below the sample interval. The interpolated peak finder is used by +default in ``vep_utils.plot_vep()``. + +For studies that require detecting latency shifts of 1–2 ms (e.g. +within-subject longitudinal comparisons), the combination of 120 Hz +display, parabolic interpolation, and the default 8-block design is +recommended. + + Timing Notes ------------ diff --git a/eegnb/analysis/vep_utils.py b/eegnb/analysis/vep_utils.py index 424d324aa..2dc772e83 100644 --- a/eegnb/analysis/vep_utils.py +++ b/eegnb/analysis/vep_utils.py @@ -1,3 +1,4 @@ +import numpy as np from mne import Evoked @@ -8,33 +9,68 @@ def print_latency(peak_name, peak_latency, peak_channel, uv): def get_peak(erp_name, evoked_potential, peak_time_min, peak_time_max, mode): - # print('{} peak min {} max {}'.format(erp_name, peak_time_min, peak_time_max)) - peak_channel, peak_latency, uv = evoked_potential.get_peak(tmin=peak_time_min, - tmax=peak_time_max, - mode=mode, return_amplitude=True) - print_latency(erp_name, peak_latency, peak_channel, uv) - return peak_latency + """Find peak latency with sub-sample precision using parabolic interpolation. + + MNE's get_peak returns the sample with the largest value, limiting + resolution to the sample interval (4 ms at 250 Hz). A parabolic fit + through the peak sample and its two neighbours recovers the true peak + location between samples, giving ~0.5 ms precision at 250 Hz. + """ + # Step 1: find the sample-level peak via MNE + peak_channel, sample_latency, _ = evoked_potential.get_peak( + tmin=peak_time_min, tmax=peak_time_max, + mode=mode, return_amplitude=True) + + # Step 2: parabolic interpolation around the peak sample + ch_idx = evoked_potential.ch_names.index(peak_channel) + times = evoked_potential.times + data = evoked_potential.data[ch_idx] + + peak_sample = np.argmin(np.abs(times - sample_latency)) + + # Need at least one sample on each side for the fit + if 0 < peak_sample < len(times) - 1: + y_prev = data[peak_sample - 1] + y_peak = data[peak_sample] + y_next = data[peak_sample + 1] + + # Parabolic interpolation: offset from centre sample + denom = y_prev - 2 * y_peak + y_next + if abs(denom) > 1e-30: + offset = 0.5 * (y_prev - y_next) / denom + dt = times[peak_sample] - times[peak_sample - 1] + interp_latency = times[peak_sample] + offset * dt + interp_uv = y_peak - 0.25 * (y_prev - y_next) * offset + else: + interp_latency = sample_latency + interp_uv = y_peak + else: + interp_latency = sample_latency + interp_uv = data[peak_sample] + + print_latency(erp_name, interp_latency, peak_channel, interp_uv) + return interp_latency def plot_vep(evoked_occipital: Evoked): n75_peak_width = 0.05 n75_latency = get_peak(erp_name='N75', - evoked_potential=evoked_occipital, - peak_time_min=0.06, - peak_time_max=0.075 + n75_peak_width, - mode='neg') + evoked_potential=evoked_occipital, + peak_time_min=0.06, + peak_time_max=0.075 + n75_peak_width, + mode='neg') p100_peak_width = 0.1 p100_latency = get_peak(erp_name='P100', - evoked_potential=evoked_occipital, - peak_time_min=n75_latency, - peak_time_max=n75_latency + p100_peak_width, - mode='pos') + evoked_potential=evoked_occipital, + peak_time_min=n75_latency, + peak_time_max=n75_latency + p100_peak_width, + mode='pos') n145_peak_width = 0.12 n145_latency = get_peak(erp_name='N145', - evoked_potential=evoked_occipital, - peak_time_min=p100_latency, - peak_time_max=p100_latency + n145_peak_width, - mode='neg') + evoked_potential=evoked_occipital, + peak_time_min=p100_latency, + peak_time_max=p100_latency + n145_peak_width, + mode='neg') plt = evoked_occipital.plot(spatial_colors=True, show=False) diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index 00ae24f4e..4e2e23472 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -14,7 +14,7 @@ class VisualPatternReversalVEP(BlockExperiment): def __init__(self, display_refresh_rate: int, eeg: Optional[EEG] = None, save_fn=None, - block_duration_seconds=50, block_trial_size: int=100, n_blocks: int=4, use_vr=False, use_fullscr=True): + block_duration_seconds=50, block_trial_size: int=100, n_blocks: int=8, use_vr=False, use_fullscr=True): self.display_refresh_rate = display_refresh_rate soa=0.5 From ddb85ebdaf439985a206c91dfb2af01d18d101cc Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 13 Apr 2026 22:20:38 +1000 Subject: [PATCH 19/94] docs: update photodiode sync patch wording --- doc/experiments/vprvep.rst | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index f8dc0c541..675e3f099 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -111,8 +111,9 @@ A proof-of-concept photodiode sync patch is drawn in the bottom-left corner of the window in monitor mode — a 50px square whose polarity flips with each reversal. Taping a photodiode over that square and routing its TTL into a spare channel would give hardware timing ground -truth; the code is in place but the hardware path has not been wired -up yet. +truth; the code is in place but the hardware path is a work in progress — +instructions for wiring a photodiode to a Cyton digital input pin will +be added in a future update. Electrode Placement From 72c670bf47ae9beda145ff9628c550eee4cd338d Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 13 Apr 2026 22:27:08 +1000 Subject: [PATCH 20/94] docs: remove gc/rush detail from PR-VEP page (handled by base class) --- doc/experiments/vprvep.rst | 5 ----- 1 file changed, 5 deletions(-) diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index 675e3f099..3b81e898d 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -177,11 +177,6 @@ timing after the fact: - ``{save_fn}_frame_stats.json`` — per-frame intervals and dropped-frame count (150%-of-refresh threshold) -During each trial loop, Python garbage collection is disabled and -process priority is raised via ``psychopy.core.rush(True)`` to reduce -the chance of a dropped frame during a critical flip. Both are reset -between blocks. - References ---------- From feb78d297092d042a44adb660893b0038be903cf Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 13 Apr 2026 22:47:58 +1000 Subject: [PATCH 21/94] feat: add longitudinal P100 tracking notebook and docs section Add 02r__pattern_reversal_longitudinal.py example that loads multiple sessions for a subject, extracts per-eye P100 latency with parabolic interpolation, and plots trends over time. Add Longitudinal Tracking section to PR-VEP docs with baseline guidance. --- doc/experiments/vprvep.rst | 19 ++ .../02r__pattern_reversal_longitudinal.py | 199 ++++++++++++++++++ 2 files changed, 218 insertions(+) create mode 100644 examples/visual_vep/02r__pattern_reversal_longitudinal.py diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index 3b81e898d..36ac6b1ac 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -159,6 +159,25 @@ display, parabolic interpolation, and the default 8-block design is recommended. +Longitudinal Tracking +--------------------- + +To monitor P100 latency over time — for example during nerve recovery or +neuroplasticity studies — record multiple sessions using the same subject +and session numbering scheme and compare the per-eye P100 across them. + +Before attributing a latency change to an intervention, establish a +**baseline**: record at least 3–5 sessions over 1–2 weeks under the same +conditions. This gives you the natural session-to-session variability for +your setup and participant, so you can distinguish a real shift from +measurement noise. + +The ``02r__pattern_reversal_longitudinal.py`` example notebook +demonstrates the full workflow: discovering sessions, extracting per-eye +P100 latencies with parabolic interpolation, printing a summary table, +and plotting latency trends and interocular differences over time. + + Timing Notes ------------ diff --git a/examples/visual_vep/02r__pattern_reversal_longitudinal.py b/examples/visual_vep/02r__pattern_reversal_longitudinal.py new file mode 100644 index 000000000..92d2cd7af --- /dev/null +++ b/examples/visual_vep/02r__pattern_reversal_longitudinal.py @@ -0,0 +1,199 @@ +""" +Longitudinal P100 Tracking +=========================== + +This example demonstrates how to load multiple PR-VEP recording sessions +for the same subject and track P100 latency over time. This is useful for +monitoring changes in visual pathway conduction — for instance during nerve +recovery, remyelination, or neuroplasticity studies — where latency shifts +of a few milliseconds between sessions are meaningful. + +The workflow is: + +1. Discover all sessions for a given subject. +2. For each session, epoch around stimulus onsets, extract the per-eye P100 + latency using parabolic interpolation (sub-sample precision), and store + the results. +3. Plot per-eye P100 latency and interocular difference over sessions. + +Before attributing a latency change to an intervention, record several +baseline sessions (at least 3–5, ideally over 1–2 weeks) to establish your +individual test-retest range. + +""" + +################################################################################################### +# Setup +# ----- + +import os +import glob +import numpy as np +import warnings +warnings.filterwarnings('ignore') +import matplotlib.pyplot as plt +import matplotlib.dates as mdates +from datetime import datetime + +from mne import Epochs, find_events + +from eegnb.analysis.utils import load_csv_as_raw +from eegnb.analysis.vep_utils import get_peak +from eegnb.devices.utils import EEG_INDICES, SAMPLE_FREQS + +################################################################################################### +# Configuration +# ------------- +# +# Point ``data_root`` at the directory tree that contains your recordings. +# The expected layout follows the eeg-expy convention:: +# +# data_root/subject{XXXX}/session{XXX}/recording_*.csv +# +# Adjust ``device_name``, ``subject_id``, and ``hardware_lag`` for your setup. +# + +data_root = os.path.join(os.path.expanduser('~/'), 'eeg-data', 'visual-PRVEP') +device_name = 'cyton' +subject_id = 1 +hardware_lag = 0.0 # seconds — set to your measured display-pipeline offset + +################################################################################################### +# Discover sessions +# ----------------- +# +# Scan the subject directory for session folders and sort them by the +# recording timestamp embedded in the CSV filename. +# + +subject_dir = os.path.join(data_root, f'subject{subject_id:04d}') +session_dirs = sorted(glob.glob(os.path.join(subject_dir, 'session*'))) + +print(f'Found {len(session_dirs)} sessions for subject {subject_id}') + +################################################################################################### +# Extract P100 per session +# ------------------------ +# +# For each session we: +# +# - Load the CSV into an MNE Raw object +# - Band-pass filter 1–30 Hz (FIR) +# - Epoch around stimulus markers, separating left and right eye +# - Subtract the hardware lag so t=0 is true photon delivery +# - Extract N75, P100, and N145 latencies with parabolic interpolation +# + +sfreq = SAMPLE_FREQS[device_name] +ch_ind = EEG_INDICES[device_name] + +results = [] + +for session_dir in session_dirs: + csv_files = sorted(glob.glob(os.path.join(session_dir, 'recording_*.csv'))) + if not csv_files: + continue + + # Parse recording date from filename + fname = os.path.basename(csv_files[0]) + date_str = fname.replace('recording_', '').replace('.csv', '') + try: + session_date = datetime.strptime(date_str, '%Y-%m-%d-%H.%M.%S') + except ValueError: + session_date = None + + session_label = os.path.basename(session_dir) + + raw = load_csv_as_raw(csv_files, sfreq=sfreq, ch_ind=ch_ind, + replace_ch_names=None, verbose=0) + raw.filter(1, 30, method='fir', verbose=False) + + events = find_events(raw, verbose=False) + event_id = {'left_eye': 1, 'right_eye': 2} + + epochs = Epochs(raw, events=events, event_id=event_id, + tmin=-0.1, tmax=0.4, baseline=None, + reject={'eeg': 65e-6}, preload=True, + verbose=False) + + if hardware_lag: + epochs.shift_time(-hardware_lag) + + drop_pct = (1 - len(epochs.events) / len(events)) * 100 + + session_result = { + 'session': session_label, + 'date': session_date, + 'n_epochs_left': len(epochs['left_eye']), + 'n_epochs_right': len(epochs['right_eye']), + 'drop_pct': drop_pct, + } + + for eye in ['left_eye', 'right_eye']: + if len(epochs[eye]) < 10: + session_result[f'{eye}_p100'] = np.nan + continue + + evoked = epochs[eye].average(picks=['Oz']) + + n75_latency = get_peak('N75', evoked, 0.06, 0.125, 'neg') + p100_latency = get_peak('P100', evoked, n75_latency, n75_latency + 0.1, 'pos') + + session_result[f'{eye}_p100'] = p100_latency * 1e3 # convert to ms + + results.append(session_result) + +print(f'\nExtracted P100 from {len(results)} sessions') + +################################################################################################### +# Summary table +# ------------- + +print(f'\n{"Session":<14} {"Date":<12} {"L-eye P100":>11} {"R-eye P100":>11} ' + f'{"IOD":>8} {"Drop%":>6} {"L-epochs":>9} {"R-epochs":>9}') +print('-' * 82) +for r in results: + date_str = r['date'].strftime('%Y-%m-%d') if r['date'] else '—' + left = r['left_eye_p100'] + right = r['right_eye_p100'] + iod = left - right if not (np.isnan(left) or np.isnan(right)) else np.nan + print(f'{r["session"]:<14} {date_str:<12} {left:>9.2f}ms {right:>9.2f}ms ' + f'{iod:>6.2f}ms {r["drop_pct"]:>5.1f}% {r["n_epochs_left"]:>9} {r["n_epochs_right"]:>9}') + +################################################################################################### +# Plot P100 latency over sessions +# -------------------------------- + +dates = [r['date'] for r in results] +left_p100 = [r['left_eye_p100'] for r in results] +right_p100 = [r['right_eye_p100'] for r in results] +iod = [l - r if not (np.isnan(l) or np.isnan(r)) else np.nan + for l, r in zip(left_p100, right_p100)] + +use_dates = all(d is not None for d in dates) +x = dates if use_dates else range(len(results)) + +fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8), sharex=True) + +# Per-eye P100 latency +ax1.plot(x, left_p100, 'o-', label='Left eye', color='blue', linewidth=2) +ax1.plot(x, right_p100, 's-', label='Right eye', color='red', linewidth=2) +ax1.set_ylabel('P100 latency (ms)') +ax1.set_title('P100 Latency Across Sessions') +ax1.legend() +ax1.grid(True, alpha=0.3) + +# Interocular difference +ax2.plot(x, iod, 'D-', color='green', linewidth=2) +ax2.axhline(y=0, color='black', linestyle='--', alpha=0.3) +ax2.set_ylabel('Interocular difference (ms)') +ax2.set_xlabel('Session date' if use_dates else 'Session index') +ax2.set_title('Interocular P100 Latency Difference (Left − Right)') +ax2.grid(True, alpha=0.3) + +if use_dates: + ax2.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) + fig.autofmt_xdate() + +plt.tight_layout() +plt.show() From 3b60a29bf781f050ed03ef92d5afc0c5bfdad7e8 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Tue, 14 Apr 2026 18:59:09 +1000 Subject: [PATCH 22/94] add missing req --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index d5188e735..c75a6e5ea 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,6 +25,7 @@ attrdict3 ## ~~ Streaming Requirements ~~ +pyxid2 muselsl>=2.0.2 # Upgrade from 1.10.5 to 1.16.2 so the arm64 lib is available to macOS Apple Silicon for preventing error: # pylsl/liblsl64.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')) From e03347d54a1ae9ba053c9973e2ddd76015aaedd6 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Tue, 14 Apr 2026 19:25:01 +1000 Subject: [PATCH 23/94] wip experiment example cleanup --- .../00x__pattern_reversal_run_experiment.py | 48 ++++++------------- 1 file changed, 15 insertions(+), 33 deletions(-) diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index 95cd83b03..7e4c30e19 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -22,6 +22,7 @@ # # Imports +from eegnb.devices import CYTON_CONFIG_GAIN_4X import platform from os import path, getenv from dotenv import load_dotenv @@ -39,19 +40,21 @@ # Set your experiment parameters here before running. # -# Set debug=True to use a synthetic EEG device (no hardware needed) -debug = False - # Display: set use_vr=True for Meta Quest, False for monitor use_vr = False -use_fullscr = True # Device: "cyton", "unicorn", "muse2", etc. -device_name = "cyton" -serial_num = "UN-2022.04.23" +device = "cyton" + +# Serial port: "COM3" for Windows, "/dev/ttyUSB0" for Linux +serial_port = "COM3" + +# Config: Only needed for Thinkpulse active electrodes, otherwise leave as None. +config = CYTON_CONFIG_GAIN_4X -# Electrode montage type: "cap", "individual", "mark-iv", or "think-pulse" -montage_type = "think-pulse" +# Electrode montage type: "cap" or "mark-iv" +montage_type = "mark-iv" +ch_names = ["Fp1", "Fp2", "C1", "C2", "O1", "O2", "POz", "Oz"] # Subject and session identifiers subject_id = 1 @@ -62,25 +65,7 @@ # --------------------- # # Start EEG device based on configuration above. - -serial_port = None -if device_name == "cyton": - serial_port = "COM3" if platform.system() == "Windows" else "/dev/cu.usbserial-DM03H289" - -if debug: - eeg_device = EEG(device="synthetic") -elif device_name == "cyton": - if montage_type in ("cap", "individual"): - ch_names = ["Fz", "Cz", "Fp1", "Fp2", "O1", "O2", "Pz", "Oz"] - elif montage_type in ("mark-iv", "think-pulse"): - ch_names = ["Fp1", "Fp2", "C1", "C2", "O1", "O2", "POz", "Oz"] - else: - ch_names = None - eeg_device = EEG(device=device_name, serial_port=serial_port, - serial_num=serial_num, ch_names=ch_names, - config=CYTON_CONFIG_GAIN_12X) -else: - eeg_device = EEG(device=device_name, serial_port=serial_port, serial_num=serial_num) +eeg_device = EEG(device, serial_port, ch_names, config) ################################################################################################### # Display and save path setup @@ -93,13 +78,11 @@ refresh_rate = 100 display = "acer-34-predator_{}Hz".format(refresh_rate) -metadata = montage_type -site = "{}_{}".format(platform.system(), display) - -data_dir = path.join(path.expanduser("~/"), getenv("DATA_DIR"), "vtfi/data") +site="{}_{}".format(display, montage_type) +data_dir = path.join(path.expanduser("~/"), getenv("DATA_DIR", ".eegnb")) save_fn = generate_save_fn(eeg_device.device_name, experiment="block_pattern-reversal", - site="{}_{}".format(site, metadata), + site=site, subject_id=subject_id, session_nb=session_nb, data_dir=data_dir) @@ -117,7 +100,6 @@ display_refresh_rate=refresh_rate, eeg=eeg_device, save_fn=save_fn, - use_fullscr=use_fullscr, use_vr=use_vr ) pattern_reversal_vep.run() From 434a912647115a5df38026434c12da63995e9d09 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Tue, 14 Apr 2026 20:23:53 +1000 Subject: [PATCH 24/94] fixed errors --- eegnb/experiments/Experiment.py | 5 +++-- eegnb/experiments/visual_vep/pattern_reversal_vep.py | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index 1be58ba05..5666b860e 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -153,7 +153,8 @@ def show_instructions(self): """ # Splitting instruction text into lines - self.instruction_text = self.instruction_text % self.duration + if '%s' in self.instruction_text: + self.instruction_text = self.instruction_text % self.duration # Disabling the cursor during display of instructions self.window.mouseVisible = False @@ -342,7 +343,7 @@ def _report_frame_stats(self): print(f" Mean: {mean_ms:.2f}ms Std: {std_ms:.2f}ms Max: {max_ms:.2f}ms") if self.save_fn: - stats_path = self.save_fn.replace('.csv', '_frame_stats.json') + stats_path = self.save_fn.with_name(self.save_fn.stem + '_frame_stats.json') with open(stats_path, 'w') as f: json.dump({ 'total_frames': total, diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index 4e2e23472..ecf8464bc 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -26,7 +26,7 @@ def __init__(self, display_refresh_rate: int, eeg: Optional[EEG] = None, save_fn # Per-trial timing sidecar: records software time, compositor predicted # display time, and delta for each trial. Written alongside the EEG CSV. if save_fn: - timing_path = save_fn.replace('.csv', '_timing.csv') + timing_path = save_fn.with_name(save_fn.stem + '_timing.csv') else: timing_path = 'vep_timing.csv' self._timing_file = open(timing_path, 'w', newline='') @@ -88,7 +88,7 @@ def load_stimulus(self) -> Dict[str, Any]: # Ensure the expected frame rate matches and is divisable by the stimulus rate(soa) assert actual_frame_rate % self.soa == 0, f"Expected frame rate divisable by stimulus rate: {self.soa}, but got {actual_frame_rate} Hz" - assert self.display_refresh_rate == actual_frame_rate, f"Expected frame rate {self.display_refresh_rate} Hz, but got {actual_frame_rate} Hz" + assert abs(self.display_refresh_rate - actual_frame_rate) <= self.display_refresh_rate * 0.05, f"Expected frame rate {self.display_refresh_rate} Hz, but got {actual_frame_rate} Hz" if self.use_vr: # Create the VR checkerboard From 88234cfc183f5534a70987241477e872d721ef34 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Wed, 15 Apr 2026 21:32:28 +1000 Subject: [PATCH 25/94] cleanup --- eegnb/__init__.py | 2 +- eegnb/analysis/utils.py | 10 ++++--- .../00x__pattern_reversal_run_experiment.py | 6 ++-- .../visual_vep/01r__pattern_reversal_viz.py | 30 ++++++++++--------- 4 files changed, 26 insertions(+), 22 deletions(-) diff --git a/eegnb/__init__.py b/eegnb/__init__.py index 02ebd828f..a59bd0949 100644 --- a/eegnb/__init__.py +++ b/eegnb/__init__.py @@ -32,7 +32,7 @@ def _get_recording_dir( """A subroutine of get_recording_dir that accepts subject and session as strings""" # folder structure is /DATA_DIR/experiment/board_name/site/subject/session/*.csv recording_dir = ( - Path(data_dir) / experiment / site / board_name / subject_str / session_str + Path(data_dir or DATA_DIR) / experiment / site / board_name / subject_str / session_str ) # check if directory exists, if not, make the directory diff --git a/eegnb/analysis/utils.py b/eegnb/analysis/utils.py index 12690222f..e7233ea76 100644 --- a/eegnb/analysis/utils.py +++ b/eegnb/analysis/utils.py @@ -7,13 +7,12 @@ import sys from collections import OrderedDict from glob import glob +from pathlib import Path from typing import TYPE_CHECKING, Union, List if TYPE_CHECKING: from eegnb.devices.eeg import EEG from time import sleep, time -import os - import pandas as pd import numpy as np import matplotlib.pyplot as plt @@ -188,9 +187,12 @@ def load_data( session_str = "*" if session == "all" else f"session{session_int:03}" recdir = _get_recording_dir(device_name, experiment, subject_str, session_str, site, data_dir) - data_path = os.path.join(data_dir, recdir, "*.csv") + data_path = recdir / "*.csv" - fnames = glob(str(data_path)) + # Primary recordings are named recording_.csv (one underscore). + # Sidecar files follow BIDS convention with an additional suffix, e.g. recording__timing.csv. + # Filter to only primary recordings. + fnames = [f for f in glob(str(data_path)) if Path(f).stem.count('_') == 1] if len(fnames) == 0: raise Exception("No filenames found in folder: %s" %data_path) diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index 7e4c30e19..495816a38 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -24,7 +24,7 @@ from eegnb.devices import CYTON_CONFIG_GAIN_4X import platform -from os import path, getenv +from os import getenv from dotenv import load_dotenv load_dotenv() @@ -79,9 +79,9 @@ display = "acer-34-predator_{}Hz".format(refresh_rate) site="{}_{}".format(display, montage_type) -data_dir = path.join(path.expanduser("~/"), getenv("DATA_DIR", ".eegnb")) +data_dir = getenv("DATA_DIR") save_fn = generate_save_fn(eeg_device.device_name, - experiment="block_pattern-reversal", + experiment="visual-PRVEP", site=site, subject_id=subject_id, session_nb=session_nb, diff --git a/examples/visual_vep/01r__pattern_reversal_viz.py b/examples/visual_vep/01r__pattern_reversal_viz.py index 940308d37..cfa227784 100644 --- a/examples/visual_vep/01r__pattern_reversal_viz.py +++ b/examples/visual_vep/01r__pattern_reversal_viz.py @@ -35,13 +35,15 @@ import warnings warnings.filterwarnings('ignore') import matplotlib.pyplot as plt +import pandas as pd +from glob import glob +from pathlib import Path from mne import Epochs, find_events +from eegnb import get_recording_dir from eegnb.analysis.utils import load_data -from eegnb.analysis import vep_utils from eegnb.analysis.vep_utils import plot_vep -from eegnb.datasets import fetch_dataset # sphinx_gallery_thumbnail_number = 3 @@ -53,8 +55,7 @@ # timestamps so that t=0 corresponds to actual photon delivery. # -def windows_quest3s_usb_unicorn_lag(): - return 0.0368 +windows_cyton_lag = 0.0368 ################################################################################################### # Load Data @@ -63,15 +64,15 @@ def windows_quest3s_usb_unicorn_lag(): # Download the PR-VEP example dataset if it is not already present locally. # -eegnb_data_path = os.path.join(os.path.expanduser('~/'), '.eegnb', 'data') -prvep_data_path = os.path.join(eegnb_data_path, 'visual-PRVEP', 'eegnb_examples') - -if not os.path.isdir(prvep_data_path): - fetch_dataset(data_dir=eegnb_data_path, experiment='visual-PRVEP', site='eegnb_examples') - raw = load_data(subject=1, session=0, - experiment='visual-PRVEP', site='eegnb_examples', device_name='unicorn', - data_dir=eegnb_data_path) + experiment='visual-PRVEP', site='acer-34-predator_100Hz_mark-iv', device_name='cyton', + data_dir=os.getenv("DATA_DIR")) + +session_dir = get_recording_dir('cyton', 'visual-PRVEP', subject_id=1, session_nb=0, + site='acer-34-predator_100Hz_mark-iv', + data_dir=os.getenv("DATA_DIR")) +timing_files = glob(str(session_dir / '*_timing.csv')) +timing_df = pd.concat([pd.read_csv(f) for f in timing_files], ignore_index=True) ################################################################################################### # Visualize the power spectrum @@ -102,9 +103,10 @@ def windows_quest3s_usb_unicorn_lag(): epochs = Epochs(raw, events=events, event_id=event_id, tmin=-0.1, tmax=0.4, baseline=None, reject={'eeg': 65e-6}, preload=True, - verbose=False, picks=[7]) + verbose=False, picks=[7], + metadata=timing_df) -epochs.shift_time(-windows_quest3s_usb_unicorn_lag()) +epochs.shift_time(-windows_cyton_lag) print('sample drop %: ', (1 - len(epochs.events)/len(events)) * 100) ################################################################################################### From 4ab3d4072233d7bf9d93fade68e49a1e1d1782da Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 16 Apr 2026 19:03:03 +1000 Subject: [PATCH 26/94] vr fixes --- doc/experiments/vprvep.rst | 2 +- eegnb/experiments/BlockExperiment.py | 2 +- eegnb/experiments/Experiment.py | 2 +- .../00x__pattern_reversal_run_experiment.py | 5 +++-- requirements.txt | 17 ++++++++++++----- 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index 36ac6b1ac..6168991df 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -99,7 +99,7 @@ Quest (VR) presentation via ``use_vr=True``. - Each eye sees the checkerboard independently, so there is no manual eye closure and no light leakage. - The OpenXR compositor supplies a per-frame predicted photon time - (``tracking_state.headPose.time``), which is attached to the EEG + (``tracking_state.headPose.timeInSeconds``), which is attached to the EEG marker in place of ``time.time()``. This cancels most of the output-side display latency — render queue, compositor buffering, scan-out, HMD persistence — on a per-frame basis, which matters for diff --git a/eegnb/experiments/BlockExperiment.py b/eegnb/experiments/BlockExperiment.py index b18a6eaae..8161e1dcb 100644 --- a/eegnb/experiments/BlockExperiment.py +++ b/eegnb/experiments/BlockExperiment.py @@ -44,7 +44,7 @@ def __init__(self, exp_name, block_duration, eeg, save_fn, block_trial_size, n_b # Initialize BaseExperiment with total trials # Pass None for duration if block_duration is None to ignore time spent in instructions - super().__init__(exp_name, block_duration, eeg, save_fn, total_trials, iti, soa, jitter, use_vr, use_fullscr, stereoscopic) + super().__init__(exp_name, block_duration, eeg, save_fn, total_trials, iti, soa, jitter, use_vr, use_fullscr, stereoscopic=stereoscopic) # Block-specific parameters self.block_duration = block_duration diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index 5666b860e..a9cd16cf0 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -254,7 +254,7 @@ def _draw(self, present_stimulus: Callable): # More accurate than time() + fixed lag constant — varies per frame # based on compositor load. Stored so present_stimulus() can use it # as the EEG marker timestamp. - self.predicted_display_time = tracking_state.headPose.time + self.predicted_display_time = tracking_state.headPose.timeInSeconds present_stimulus() def _clear_user_input(self): diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index 495816a38..ee4d7efc8 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -41,7 +41,7 @@ # # Display: set use_vr=True for Meta Quest, False for monitor -use_vr = False +use_vr = True # Device: "cyton", "unicorn", "muse2", etc. device = "cyton" @@ -57,7 +57,7 @@ ch_names = ["Fp1", "Fp2", "C1", "C2", "O1", "O2", "POz", "Oz"] # Subject and session identifiers -subject_id = 1 +subject_id = 0 session_nb = 0 ################################################################################################### @@ -66,6 +66,7 @@ # # Start EEG device based on configuration above. eeg_device = EEG(device, serial_port, ch_names, config) +#eeg_device = EEG(device="synthetic") ################################################################################################### # Display and save path setup diff --git a/requirements.txt b/requirements.txt index c75a6e5ea..7fc2a4f94 100644 --- a/requirements.txt +++ b/requirements.txt @@ -52,7 +52,8 @@ click # a specific version prevents an endless dependency resolution loop. pyobjc==7.3; sys_platform == 'darwin' #upgrade psychopy to use newer wxpython dependency which is prebuilt for m1 support. -psychopy==2025.1.1 +# Forked with a fix for Rift stereo projection matrix crash under strict-ndim psychxr. +psychopy @ git+https://github.com/pellet/psychopy.git@v2026.2.0-rift-fix #needed for macos arm sound support: https://github.com/psychopy/psychopy-sounddevice/pull/4 -e psychopy-sounddevice ffpyplayer==4.5.2 # 4.5.3 fails to build as wheel. @@ -80,16 +81,22 @@ pywinhook @ https://github.com/ActivityWatch/wheels/raw/master/pywinhook/pyWinho # See issue: https://github.com/psychopy/psychopy/issues/2876 pyglet==1.4.11 ; platform_system == "Windows" -# Oculus/Quest VR support - currently only supported on Windows and -# <= 3.9, otherwise will need Oculus PC SDK to build wheel. -psychxr>=0.2.4rc2; platform_system == "Windows" and python_version <= "3.9" +# Oculus/Quest VR support - prebuilt Windows wheels from the fork's GitHub +# release (0.2.6rc1 adds Python 3.10 support). PyPI only has 0.2.4 (<= 3.9). +psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp38-cp38-win_amd64.whl ; platform_system == "Windows" and python_version == "3.8" +psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp39-cp39-win_amd64.whl ; platform_system == "Windows" and python_version == "3.9" +psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp310-cp310-win_amd64.whl ; platform_system == "Windows" and python_version == "3.10" +# PsychoPy/PsychXR does not yet officially support Python > 3.10; the wheels below are experimental. +psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp311-cp311-win_amd64.whl ; platform_system == "Windows" and python_version == "3.11" +psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp312-cp312-win_amd64.whl ; platform_system == "Windows" and python_version == "3.12" +psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp313-cp313-win_amd64.whl ; platform_system == "Windows" and python_version == "3.13" # Used for generating checkerboard in pattern reversal experiment stimupy ## ~~ Docsbuild Requirements ~~ -setuptools # brainflow imports pkg_resources at runtime; not included by default in Python 3.10+ envs +setuptools<81 # brainflow imports pkg_resources at runtime; setuptools 81 deprecated it and 82 removed it python-dotenv recommonmark brainflow From b83cf441c1a595a29d14a66779a1b419e06efbe9 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 16 Apr 2026 19:19:01 +1000 Subject: [PATCH 27/94] fix settings --- examples/visual_vep/00x__pattern_reversal_run_experiment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index ee4d7efc8..8ed009470 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -65,7 +65,7 @@ # --------------------- # # Start EEG device based on configuration above. -eeg_device = EEG(device, serial_port, ch_names, config) +eeg_device = EEG(device, serial_port=serial_port, ch_names=ch_names, config=config) #eeg_device = EEG(device="synthetic") ################################################################################################### From 3b3ae5dfecfb70f87248986b205084ca7cb1bb92 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 16 Apr 2026 20:20:40 +1000 Subject: [PATCH 28/94] fix positions --- examples/visual_vep/00x__pattern_reversal_run_experiment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index 8ed009470..54ee71ef2 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -54,7 +54,7 @@ # Electrode montage type: "cap" or "mark-iv" montage_type = "mark-iv" -ch_names = ["Fp1", "Fp2", "C1", "C2", "O1", "O2", "POz", "Oz"] +ch_names = ["Fp1", "Fp2", "C1", "C2", "POz", "Oz", "O1", "O2"] # Subject and session identifiers subject_id = 0 From 058a31b9498b17a5f79b0952e7729c18522aee5a Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 16 Apr 2026 21:16:38 +1000 Subject: [PATCH 29/94] cyton amplification config fixes --- eegnb/devices/eeg.py | 11 +++++++++++ eegnb/devices/utils.py | 4 ++-- .../00x__pattern_reversal_run_experiment.py | 3 +-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/eegnb/devices/eeg.py b/eegnb/devices/eeg.py index ba85f2e25..f635d0ae6 100644 --- a/eegnb/devices/eeg.py +++ b/eegnb/devices/eeg.py @@ -412,6 +412,17 @@ def _brainflow_extract(self, data): eeg_data = data[:, BoardShim.get_eeg_channels(self.brainflow_id)] timestamps = data[:, BoardShim.get_timestamp_channel(self.brainflow_id)] + # BrainFlow scales Cyton data assuming 24× gain. If a different gain was + # configured via config_board, correct the scaling here. + # Config string format: x{ch}0{gain_code}0110X (gain_code: 0=1×,1=2×,2=4×,3=6×,4=12×,5=24×) + if self.config and 'cyton' in self.device_name: + gain_multipliers = {0: 1, 1: 2, 2: 4, 3: 6, 4: 12, 5: 24} + brainflow_assumed_gain = 24 + gain_code = int(self.config[3]) # 4th char of first command "x{ch}0{G}..." + actual_gain = gain_multipliers.get(gain_code, brainflow_assumed_gain) + if actual_gain != brainflow_assumed_gain: + eeg_data = eeg_data * (actual_gain / brainflow_assumed_gain) + return ch_names, eeg_data, timestamps def _brainflow_push_sample(self, marker): diff --git a/eegnb/devices/utils.py b/eegnb/devices/utils.py index d2075be13..e16f37b07 100644 --- a/eegnb/devices/utils.py +++ b/eegnb/devices/utils.py @@ -104,7 +104,7 @@ # S1 = SRB1 connection (0=disconnected) # # Build a config string by joining per-channel strings — applied with -# EEG(device='cyton', config=CYTON_CONFIG_GAIN_12X). +# EEG(device='cyton', config=CYTON_CONFIG_GAIN_4X). def _cyton_ch_config(gain_code: int, n_channels: int = 8) -> str: """Build a Cyton channel-settings string for all channels. @@ -116,7 +116,7 @@ def _cyton_ch_config(gain_code: int, n_channels: int = 8) -> str: Returns: Config string ready to pass to ``EEG(config=...)``. """ - return "".join(f"x{ch}{gain_code}0110X" for ch in range(1, n_channels + 1)) + return "".join(f"x{ch}0{gain_code}0110X" for ch in range(1, n_channels + 1)) # Standard gain presets — normal EEG input, bias enabled, SRB2 on, SRB1 off. CYTON_CONFIG_GAIN_1X = _cyton_ch_config(0) # 1× (for strong signals / testing) diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index 54ee71ef2..1e36f1f91 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -22,14 +22,13 @@ # # Imports -from eegnb.devices import CYTON_CONFIG_GAIN_4X import platform from os import getenv from dotenv import load_dotenv load_dotenv() from eegnb import generate_save_fn -from eegnb.devices import CYTON_CONFIG_GAIN_12X +from eegnb.devices import CYTON_CONFIG_GAIN_4X from eegnb.devices.eeg import EEG from eegnb.experiments.visual_vep import VisualPatternReversalVEP From 00e22364af2690a61e2b7f3f58e49d722ddf4bfb Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 16 Apr 2026 21:41:26 +1000 Subject: [PATCH 30/94] first run of analysis --- eegnb/analysis/vep_utils.py | 36 +++++++++++-------- .../visual_vep/01r__pattern_reversal_viz.py | 31 +++++++++------- 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/eegnb/analysis/vep_utils.py b/eegnb/analysis/vep_utils.py index 2dc772e83..ecbd3645c 100644 --- a/eegnb/analysis/vep_utils.py +++ b/eegnb/analysis/vep_utils.py @@ -17,9 +17,13 @@ def get_peak(erp_name, evoked_potential, peak_time_min, peak_time_max, mode): location between samples, giving ~0.5 ms precision at 250 Hz. """ # Step 1: find the sample-level peak via MNE - peak_channel, sample_latency, _ = evoked_potential.get_peak( - tmin=peak_time_min, tmax=peak_time_max, - mode=mode, return_amplitude=True) + try: + peak_channel, sample_latency, _ = evoked_potential.get_peak( + tmin=peak_time_min, tmax=peak_time_max, + mode=mode, return_amplitude=True) + except ValueError as e: + print(f'{erp_name}: could not find peak ({e})') + return None # Step 2: parabolic interpolation around the peak sample ch_idx = evoked_potential.ch_names.index(peak_channel) @@ -60,17 +64,20 @@ def plot_vep(evoked_occipital: Evoked): peak_time_max=0.075 + n75_peak_width, mode='neg') p100_peak_width = 0.1 - p100_latency = get_peak(erp_name='P100', - evoked_potential=evoked_occipital, - peak_time_min=n75_latency, - peak_time_max=n75_latency + p100_peak_width, - mode='pos') + p100_latency = None + if n75_latency is not None: + p100_latency = get_peak(erp_name='P100', + evoked_potential=evoked_occipital, + peak_time_min=n75_latency, + peak_time_max=n75_latency + p100_peak_width, + mode='pos') n145_peak_width = 0.12 - n145_latency = get_peak(erp_name='N145', - evoked_potential=evoked_occipital, - peak_time_min=p100_latency, - peak_time_max=p100_latency + n145_peak_width, - mode='neg') + if p100_latency is not None: + get_peak(erp_name='N145', + evoked_potential=evoked_occipital, + peak_time_min=p100_latency, + peak_time_max=p100_latency + n145_peak_width, + mode='neg') plt = evoked_occipital.plot(spatial_colors=True, show=False) @@ -82,7 +89,8 @@ def plot_vep(evoked_occipital: Evoked): ax.axvline(x=0, color='r', linestyle='--', label='stim') ax.axvline(x=0.100, color='r', linestyle='--', label='100 ms') #ax.axvline(x=n75_latency, color='g', linestyle='-', label='n75') - ax.axvline(x=p100_latency, color='g', linestyle='-', label='p100') + if p100_latency is not None: + ax.axvline(x=p100_latency, color='g', linestyle='-', label='p100') #ax.axvline(x=n145_latency, color='g', linestyle='-', label='n145') # Add a legend to each subplot diff --git a/examples/visual_vep/01r__pattern_reversal_viz.py b/examples/visual_vep/01r__pattern_reversal_viz.py index cfa227784..90f47e1d7 100644 --- a/examples/visual_vep/01r__pattern_reversal_viz.py +++ b/examples/visual_vep/01r__pattern_reversal_viz.py @@ -9,11 +9,11 @@ colours are toggled once each half a second). The data used is the first subject and first session of the eeg-expy PR-VEP -example dataset, recorded using a g.tec Unicorn EEG headset with electrodes -placed at occipital locations (O1, Iz, O2, PO1, PO2) fitted around a Meta -Quest 3S headset. The session used the Meta Quest 3S linked with a PC to -display the checkerboard reversal animation in VR, alternating monocular -stimulation between left and right eye across blocks. +example dataset, recorded using an OpenBCI Cyton EEG headset with electrodes +placed at (Fp1, Fp2, C3, C4, P7, P8, O1, O2) fitted around a Meta +Quest 2 headset. The session used the Meta Quest 2 linked with a PC to +display the checkerboard reversal animation in VR at 120 Hz, alternating +monocular stimulation between left and right eye across blocks. We first use ``fetch_dataset`` to obtain the data files. If the files are not already present in the local data directory they will be downloaded from the @@ -31,9 +31,14 @@ # ----- import os +import sys import numpy as np import warnings warnings.filterwarnings('ignore') + +# Ensure Unicode characters (e.g. μ) print correctly on Windows terminals +if sys.stdout.encoding and sys.stdout.encoding.lower() != 'utf-8': + sys.stdout.reconfigure(encoding='utf-8', errors='replace') import matplotlib.pyplot as plt import pandas as pd from glob import glob @@ -64,12 +69,12 @@ # Download the PR-VEP example dataset if it is not already present locally. # -raw = load_data(subject=1, session=0, - experiment='visual-PRVEP', site='acer-34-predator_100Hz_mark-iv', device_name='cyton', +raw = load_data(subject=0, session=0, + experiment='visual-PRVEP', site='quest-2_120Hz_mark-iv', device_name='cyton', data_dir=os.getenv("DATA_DIR")) -session_dir = get_recording_dir('cyton', 'visual-PRVEP', subject_id=1, session_nb=0, - site='acer-34-predator_100Hz_mark-iv', +session_dir = get_recording_dir('cyton', 'visual-PRVEP', subject_id=0, session_nb=0, + site='quest-2_120Hz_mark-iv', data_dir=os.getenv("DATA_DIR")) timing_files = glob(str(session_dir / '*_timing.csv')) timing_df = pd.concat([pd.read_csv(f) for f in timing_files], ignore_index=True) @@ -101,9 +106,9 @@ event_id = {'left_eye': 1, 'right_eye': 2} epochs = Epochs(raw, events=events, event_id=event_id, - tmin=-0.1, tmax=0.4, baseline=None, + tmin=-0.1, tmax=0.4, baseline=(None, 0), reject={'eeg': 65e-6}, preload=True, - verbose=False, picks=[7], + verbose=False, picks=['POz', 'Oz'], metadata=timing_df) epochs.shift_time(-windows_cyton_lag) @@ -126,8 +131,8 @@ # Compare evoked potentials by eye # --------------------------------- -evoked_left = epochs['left_eye'].average(picks=['Oz']) -evoked_right = epochs['right_eye'].average(picks=['Oz']) +evoked_left = epochs['left_eye'].average(picks=['POz']) +evoked_right = epochs['right_eye'].average(picks=['POz']) fig, ax = plt.subplots(figsize=(10, 6)) times = evoked_left.times * 1000 From 5ac048c4d1ef3326be31878f30dce21eccf20f25 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sat, 18 Apr 2026 08:52:31 +1000 Subject: [PATCH 31/94] gain fixes for active electrodes --- eegnb/devices/__init__.py | 1 + eegnb/devices/eeg.py | 15 +++++++++------ eegnb/devices/utils.py | 11 ++++++----- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/eegnb/devices/__init__.py b/eegnb/devices/__init__.py index 3b0919c63..a95062678 100644 --- a/eegnb/devices/__init__.py +++ b/eegnb/devices/__init__.py @@ -3,6 +3,7 @@ CYTON_CONFIG_GAIN_2X, CYTON_CONFIG_GAIN_4X, CYTON_CONFIG_GAIN_6X, + CYTON_CONFIG_GAIN_8X, CYTON_CONFIG_GAIN_12X, CYTON_CONFIG_GAIN_24X, ) diff --git a/eegnb/devices/eeg.py b/eegnb/devices/eeg.py index f635d0ae6..dde4519ed 100644 --- a/eegnb/devices/eeg.py +++ b/eegnb/devices/eeg.py @@ -333,11 +333,14 @@ def _init_brainflow(self): if self.config: # For Cyton boards, split config string by 'X' delimiter and apply each setting if 'cyton' in self.device_name: - config_settings = self.config.split('X') + config_settings = [s for s in self.config.split('X') if s] for setting in config_settings: - self.board.config_board(setting + 'X') + cmd = setting + 'X' + response = self.board.config_board(cmd) + print(f"[cyton config] {cmd} -> {response!r}") else: - self.board.config_board(self.config) + response = self.board.config_board(self.config) + print(f"[config_board] {self.config!r} -> {response!r}") def _start_brainflow(self): # only start stream if non exists @@ -414,14 +417,14 @@ def _brainflow_extract(self, data): # BrainFlow scales Cyton data assuming 24× gain. If a different gain was # configured via config_board, correct the scaling here. - # Config string format: x{ch}0{gain_code}0110X (gain_code: 0=1×,1=2×,2=4×,3=6×,4=12×,5=24×) + # Config string format: x{ch}0{gain_code}0110X (gain_code: 0=1×,1=2×,2=4×,3=6×,4=8×,5=12×,6=24×) if self.config and 'cyton' in self.device_name: - gain_multipliers = {0: 1, 1: 2, 2: 4, 3: 6, 4: 12, 5: 24} + gain_multipliers = {0: 1, 1: 2, 2: 4, 3: 6, 4: 8, 5: 12, 6: 24} brainflow_assumed_gain = 24 gain_code = int(self.config[3]) # 4th char of first command "x{ch}0{G}..." actual_gain = gain_multipliers.get(gain_code, brainflow_assumed_gain) if actual_gain != brainflow_assumed_gain: - eeg_data = eeg_data * (actual_gain / brainflow_assumed_gain) + eeg_data = eeg_data * (brainflow_assumed_gain / actual_gain) return ch_names, eeg_data, timestamps diff --git a/eegnb/devices/utils.py b/eegnb/devices/utils.py index e16f37b07..55c213636 100644 --- a/eegnb/devices/utils.py +++ b/eegnb/devices/utils.py @@ -97,7 +97,7 @@ # Each channel command has the format: x N P G I B S1 S2 X # N = channel number (1-8) # P = power (0=ON, 1=OFF) -# G = gain (0=1×, 1=2×, 2=4×, 3=6×, 4=12×, 5=24×) +# G = gain (0=1×, 1=2×, 2=4×, 3=6×, 4=8×, 5=12×, 6=24×) # I = input type (0=normal EEG, 1=shorted, ...) # B = include in BIAS derivation (1=yes) # S2 = SRB2 connection (1=connected) @@ -110,7 +110,7 @@ def _cyton_ch_config(gain_code: int, n_channels: int = 8) -> str: """Build a Cyton channel-settings string for all channels. Args: - gain_code: BrainFlow gain code (0=1×, 1=2×, 2=4×, 3=6×, 4=12×, 5=24×). + gain_code: ADS1299 gain code (0=1×, 1=2×, 2=4×, 3=6×, 4=8×, 5=12×, 6=24×). n_channels: Number of channels to configure (default 8 for standard Cyton). Returns: @@ -121,10 +121,11 @@ def _cyton_ch_config(gain_code: int, n_channels: int = 8) -> str: # Standard gain presets — normal EEG input, bias enabled, SRB2 on, SRB1 off. CYTON_CONFIG_GAIN_1X = _cyton_ch_config(0) # 1× (for strong signals / testing) CYTON_CONFIG_GAIN_2X = _cyton_ch_config(1) # 2× -CYTON_CONFIG_GAIN_4X = _cyton_ch_config(2) # 4× +CYTON_CONFIG_GAIN_4X = _cyton_ch_config(2) # 4× - for Thinkpulse electrodes CYTON_CONFIG_GAIN_6X = _cyton_ch_config(3) # 6× -CYTON_CONFIG_GAIN_12X = _cyton_ch_config(4) # 12× — good general-purpose EEG config -CYTON_CONFIG_GAIN_24X = _cyton_ch_config(5) # 24× — for very quiet environments +CYTON_CONFIG_GAIN_8X = _cyton_ch_config(4) # 8× +CYTON_CONFIG_GAIN_12X = _cyton_ch_config(5) # 12× — good general-purpose EEG config +CYTON_CONFIG_GAIN_24X = _cyton_ch_config(6) # 24× — default gain def create_stim_array(timestamps, markers): From c5419d1dc9e55b563b626850f75ed9bdb209cf5f Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sat, 18 Apr 2026 10:25:20 +1000 Subject: [PATCH 32/94] feed vr compositor during soa wait --- eegnb/experiments/Experiment.py | 29 +++++++++++++++++++ eegnb/experiments/rest/eoec.py | 7 +++++ eegnb/experiments/visual_n170/n170.py | 8 +++-- eegnb/experiments/visual_p300/p300.py | 8 +++-- .../visual_vep/pattern_reversal_vep.py | 19 ++++++++---- 5 files changed, 62 insertions(+), 9 deletions(-) diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index a9cd16cf0..7e24b2af9 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -115,6 +115,23 @@ def present_iti(self): """ self.window.flip() + def present_soa(self, idx: int): + """ + Method called each frame during the SOA wait (stimulus-on period between trial transitions). + + VR compositors require continuous frame submission (~120 Hz) or they emit + "failed to meet deadline" warnings and force half-rate reprojection. The default + implementation just flips; VR-capable subclasses should override to redraw the + stimulus for trial `idx` without side effects (no EEG markers, no timing rows). + + A bare window.flip() submits a stale/undefined frame and is not sufficient for + Quest / OpenXR compositors under load. + + idx : Trial index of the most recently presented stimulus — same value that was + passed to the preceding present_stimulus call. + """ + self.window.flip() + def setup(self, instructions=True): # Setting up Graphics self.window = ( @@ -280,6 +297,14 @@ def _run_trial_loop(self, start_time, duration): """ + if self.use_vr and type(self).present_soa is BaseExperiment.present_soa: + raise NotImplementedError( + f"{type(self).__name__} uses VR but does not override present_soa(idx). " + "psychxr does not honor setAutoDraw, and the VR compositor requires per-frame " + "redraws during the SOA wait; the default flip-only implementation will blank " + "the stimulus after one frame. Override present_soa(idx) to redraw your stimulus." + ) + def iti_with_jitter(): return self.iti + np.random.rand() * self.jitter @@ -310,6 +335,10 @@ def iti_with_jitter(): # Stimulus presentation overwritten by specific experiment self._draw(lambda: self.present_stimulus(current_trial)) rendering_trial = current_trial + else: + # Keep submitting frames during SOA wait — VR compositor + # drops to half-rate if we stall between reversals. + self._draw(lambda: self.present_soa(current_trial)) else: self._draw(lambda: self.present_iti()) diff --git a/eegnb/experiments/rest/eoec.py b/eegnb/experiments/rest/eoec.py index 38ed467db..b95d196e1 100644 --- a/eegnb/experiments/rest/eoec.py +++ b/eegnb/experiments/rest/eoec.py @@ -136,12 +136,19 @@ def present_stimulus(self, idx: int): else: self.close_sound.play() + self._draw_block_cue(label) + + def _draw_block_cue(self, label): if label == 0: self.fixation.draw() else: self.close_text.draw() self.window.flip() + def present_soa(self, idx: int): + label = self.trials["parameter"].iloc[idx] + self._draw_block_cue(label) + def run(self, instructions: bool = True): try: super().run(instructions) diff --git a/eegnb/experiments/visual_n170/n170.py b/eegnb/experiments/visual_n170/n170.py index 231381ff7..29a8a013d 100644 --- a/eegnb/experiments/visual_n170/n170.py +++ b/eegnb/experiments/visual_n170/n170.py @@ -40,9 +40,9 @@ def present_stimulus(self, idx: int): # Get the label of the trial label = self.trials["parameter"].iloc[idx] # Get the image to be presented - image = choice(self.faces if label == 1 else self.houses) + self._current_image = choice(self.faces if label == 1 else self.houses) # Draw the image - image.draw() + self._current_image.draw() # Pushing the sample to the EEG @@ -64,4 +64,8 @@ def present_stimulus(self, idx: int): self.window.flip() + def present_soa(self, idx: int): + self._current_image.draw() + self.window.flip() + diff --git a/eegnb/experiments/visual_p300/p300.py b/eegnb/experiments/visual_p300/p300.py index d6a8a1df3..8e6974241 100644 --- a/eegnb/experiments/visual_p300/p300.py +++ b/eegnb/experiments/visual_p300/p300.py @@ -38,8 +38,8 @@ def load_stimulus(self): def present_stimulus(self, idx: int): label = self.trials["parameter"].iloc[idx] - image = choice(self.targets if label == 1 else self.nontargets) - image.draw() + self._current_image = choice(self.targets if label == 1 else self.nontargets) + self._current_image.draw() # Push sample if self.eeg: @@ -50,4 +50,8 @@ def present_stimulus(self, idx: int): marker = self.markernames[label] self.eeg.push_sample(marker=marker, timestamp=timestamp) + self.window.flip() + + def present_soa(self, idx: int): + self._current_image.draw() self.window.flip() \ No newline at end of file diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index ecf8464bc..357977727 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -207,7 +207,10 @@ def present_block_instructions(self, current_block: int) -> None: self.window.flip() def present_stimulus(self, idx: int): - # Get the label of the trial + self._draw_frame(idx) + self._push_marker(idx) + + def _draw_frame(self, idx: int): trial_idx = self.current_block_index * self.block_trial_size + idx label = self.parameter[trial_idx] @@ -222,7 +225,7 @@ def present_stimulus(self, idx: int): else: self.black_background.draw() display = self.stim['monoscopic'] - + checkerboard_frame = idx % 2 display['checkerboards'][checkerboard_frame].draw() display['fixation'].draw() @@ -239,6 +242,10 @@ def present_stimulus(self, idx: int): self.window.flip() + def _push_marker(self, idx: int): + trial_idx = self.current_block_index * self.block_trial_size + idx + label = self.parameter[trial_idx] + # Use compositor-reported predicted display time when available (VR path). # Falls back to time() for monitor path — apply hardware lag offset in analysis. software_time = time() @@ -248,17 +255,19 @@ def present_stimulus(self, idx: int): else: eeg_timestamp = software_time - # Pushing the sample to the EEG marker = self.markernames[label] self.eeg.push_sample(marker=marker, timestamp=eeg_timestamp) - # Log per-trial timing metadata for post-hoc validation - trial_idx = self.current_block_index * self.block_trial_size + idx delta_ms = (predicted_display_time - software_time) * 1000 if predicted_display_time else None self._timing_writer.writerow( [trial_idx, software_time, predicted_display_time, delta_ms, self.use_vr] ) + def present_soa(self, idx: int): + # Redraw the current checkerboard each frame during the SOA wait so the + # VR compositor stays fed (~120 Hz). No marker push / timing row. + self._draw_frame(idx) + def __del__(self): if hasattr(self, '_timing_file') and not self._timing_file.closed: self._timing_file.close() From 99a9b041b5b120f0af65d9ce88382282a0718f8b Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 19 Apr 2026 16:44:16 +1000 Subject: [PATCH 33/94] experiment fixes for running cap montage --- eegnb/devices/eeg.py | 6 ++++-- eegnb/experiments/visual_vep/pattern_reversal_vep.py | 12 ++++-------- .../00x__pattern_reversal_run_experiment.py | 9 +++++---- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/eegnb/devices/eeg.py b/eegnb/devices/eeg.py index dde4519ed..ea959a06a 100644 --- a/eegnb/devices/eeg.py +++ b/eegnb/devices/eeg.py @@ -684,13 +684,15 @@ def start(self, fn, duration=None): - def push_sample(self, marker, timestamp, marker_name=None): + def push_sample(self, marker, timestamp=None, marker_name=None): """ Universal method for pushing a marker and its timestamp to store alongside the EEG data. Parameters: marker (int): marker number for the stimuli being presented. - timestamp (float): timestamp of stimulus onset from time.time() function. + timestamp (float, optional): timestamp of stimulus onset from time.time() function. + Not used by the BrainFlow backend (which records the board's current sample + timestamp instead). Required by muselsl and kernelflow backends. """ if self.backend == "brainflow": self._brainflow_push_sample(marker=marker) diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index 357977727..45a9ee236 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -1,4 +1,4 @@ -from time import time +from time import time import csv import os import numpy as np @@ -246,18 +246,14 @@ def _push_marker(self, idx: int): trial_idx = self.current_block_index * self.block_trial_size + idx label = self.parameter[trial_idx] - # Use compositor-reported predicted display time when available (VR path). - # Falls back to time() for monitor path — apply hardware lag offset in analysis. software_time = time() predicted_display_time = getattr(self, 'predicted_display_time', None) - if predicted_display_time is not None: - eeg_timestamp = predicted_display_time - else: - eeg_timestamp = software_time marker = self.markernames[label] - self.eeg.push_sample(marker=marker, timestamp=eeg_timestamp) + self.eeg.push_sample(marker=marker) + # Record predicted_display_time in the timing sidecar — analysis + # uses per-trial variation around the mean for compositor-jitter correction. delta_ms = (predicted_display_time - software_time) * 1000 if predicted_display_time else None self._timing_writer.writerow( [trial_idx, software_time, predicted_display_time, delta_ms, self.use_vr] diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index 1e36f1f91..0e4a86eed 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -49,15 +49,16 @@ serial_port = "COM3" # Config: Only needed for Thinkpulse active electrodes, otherwise leave as None. -config = CYTON_CONFIG_GAIN_4X +config = None #CYTON_CONFIG_GAIN_4X # Electrode montage type: "cap" or "mark-iv" -montage_type = "mark-iv" -ch_names = ["Fp1", "Fp2", "C1", "C2", "POz", "Oz", "O1", "O2"] +montage_type = "cap" #"mark-iv" +# Ground Fpz, Ref M1. +ch_names = ["Fp1", "Fp2", "T5", "T6", "O1", "O2", "Oz", "M2"] # Subject and session identifiers subject_id = 0 -session_nb = 0 +session_nb = 2 ################################################################################################### # Initiate EEG device From fb87079045fc8749347b941db59954cceb138a8e Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 19 Apr 2026 19:31:05 +1000 Subject: [PATCH 34/94] don't write to the sidecar if the eeg connection/marker fails --- eegnb/devices/eeg.py | 7 +++++++ eegnb/experiments/visual_vep/pattern_reversal_vep.py | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/eegnb/devices/eeg.py b/eegnb/devices/eeg.py index ea959a06a..b82cc54f1 100644 --- a/eegnb/devices/eeg.py +++ b/eegnb/devices/eeg.py @@ -693,7 +693,12 @@ def push_sample(self, marker, timestamp=None, marker_name=None): timestamp (float, optional): timestamp of stimulus onset from time.time() function. Not used by the BrainFlow backend (which records the board's current sample timestamp instead). Required by muselsl and kernelflow backends. + + Returns: + bool: True if the marker was recorded, False if the stream is no longer active. """ + if not self.stream_started: + return False if self.backend == "brainflow": self._brainflow_push_sample(marker=marker) elif self.backend == "muselsl": @@ -704,8 +709,10 @@ def push_sample(self, marker, timestamp=None, marker_name=None): self._serial_push_sample(marker=marker) elif self.backend == "xidport": self._xid_push_sample(marker=marker) + return True def stop(self): + self.stream_started = False if self.backend == "brainflow": self._stop_brainflow() elif self.backend == "muselsl": diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index 45a9ee236..15994fcac 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -1,6 +1,5 @@ from time import time import csv -import os import numpy as np from psychopy import visual @@ -250,7 +249,8 @@ def _push_marker(self, idx: int): predicted_display_time = getattr(self, 'predicted_display_time', None) marker = self.markernames[label] - self.eeg.push_sample(marker=marker) + if not self.eeg.push_sample(marker=marker): + return # Record predicted_display_time in the timing sidecar — analysis # uses per-trial variation around the mean for compositor-jitter correction. From 4031f22cd9d7ed32dcb70ccf6e626a492ad80a72 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sun, 19 Apr 2026 22:26:03 +1000 Subject: [PATCH 35/94] reword --- doc/experiments/vprvep.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index 6168991df..9b6da21d9 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -163,7 +163,7 @@ Longitudinal Tracking --------------------- To monitor P100 latency over time — for example during nerve recovery or -neuroplasticity studies — record multiple sessions using the same subject +longitudinal monitoring — record multiple sessions using the same subject and session numbering scheme and compare the per-eye P100 across them. Before attributing a latency change to an intervention, establish a From 39ee2749bd0c805a8b8a8f60f920e07ace4e812d Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 20 Apr 2026 08:24:24 +1000 Subject: [PATCH 36/94] Update plot_vep to use fixed non-cascading windows --- eegnb/analysis/vep_utils.py | 55 ++++++++++--------------------------- 1 file changed, 15 insertions(+), 40 deletions(-) diff --git a/eegnb/analysis/vep_utils.py b/eegnb/analysis/vep_utils.py index ecbd3645c..252c2dd24 100644 --- a/eegnb/analysis/vep_utils.py +++ b/eegnb/analysis/vep_utils.py @@ -57,48 +57,23 @@ def get_peak(erp_name, evoked_potential, peak_time_min, peak_time_max, mode): def plot_vep(evoked_occipital: Evoked): - n75_peak_width = 0.05 - n75_latency = get_peak(erp_name='N75', - evoked_potential=evoked_occipital, - peak_time_min=0.06, - peak_time_max=0.075 + n75_peak_width, - mode='neg') - p100_peak_width = 0.1 - p100_latency = None - if n75_latency is not None: - p100_latency = get_peak(erp_name='P100', - evoked_potential=evoked_occipital, - peak_time_min=n75_latency, - peak_time_max=n75_latency + p100_peak_width, - mode='pos') - n145_peak_width = 0.12 - if p100_latency is not None: - get_peak(erp_name='N145', - evoked_potential=evoked_occipital, - peak_time_min=p100_latency, - peak_time_max=p100_latency + n145_peak_width, - mode='neg') - - plt = evoked_occipital.plot(spatial_colors=True, show=False) - - # Get the axes from the figure - axes = plt.get_axes() # This gets all Axes objects - - # Add vertical lines as markers to each subplot - ax = axes[0] - ax.axvline(x=0, color='r', linestyle='--', label='stim') + # Fixed absolute windows — independent of each other so a missed N75 + # doesn't cascade into a missed P100 or N145. + get_peak(erp_name='N75', evoked_potential=evoked_occipital, + peak_time_min=0.060, peak_time_max=0.090, mode='neg') + p100_latency = get_peak(erp_name='P100', evoked_potential=evoked_occipital, + peak_time_min=0.080, peak_time_max=0.130, mode='pos') + get_peak(erp_name='N145', evoked_potential=evoked_occipital, + peak_time_min=0.120, peak_time_max=0.170, mode='neg') + + fig = evoked_occipital.plot(show=False) + + ax = fig.get_axes()[0] + ax.axvline(x=0, color='r', linestyle='--', label='stim') ax.axvline(x=0.100, color='r', linestyle='--', label='100 ms') - #ax.axvline(x=n75_latency, color='g', linestyle='-', label='n75') if p100_latency is not None: ax.axvline(x=p100_latency, color='g', linestyle='-', label='p100') - #ax.axvline(x=n145_latency, color='g', linestyle='-', label='n145') - - # Add a legend to each subplot - # ax.legend() - - # plt.show() - # Add a legend - plt.legend(loc="lower right") + fig.legend(loc="lower right") - return plt + return fig From 1a063106a4882c83899894d4df1aca3cd691079a Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 20 Apr 2026 20:38:16 +1000 Subject: [PATCH 37/94] add check latency is set to 1ms for cyton on windows. --- eegnb/devices/eeg.py | 3 ++ eegnb/devices/utils.py | 78 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) diff --git a/eegnb/devices/eeg.py b/eegnb/devices/eeg.py index b82cc54f1..51e08bcac 100644 --- a/eegnb/devices/eeg.py +++ b/eegnb/devices/eeg.py @@ -25,6 +25,7 @@ from eegnb.devices.utils import ( get_openbci_usb, create_stim_array, + assert_ftdi_latency_1ms, SAMPLE_FREQS, EEG_INDICES, EEG_CHANNELS, @@ -323,6 +324,8 @@ def _init_brainflow(self): if self.serial_port: serial_port = str(self.serial_port) self.brainflow_params.serial_port = serial_port + if self.device_name in ('cyton', 'cyton_daisy'): + assert_ftdi_latency_1ms(serial_port) # Initialize board_shim self.sfreq = BoardShim.get_sampling_rate(self.brainflow_id) diff --git a/eegnb/devices/utils.py b/eegnb/devices/utils.py index 55c213636..9b60d95b3 100644 --- a/eegnb/devices/utils.py +++ b/eegnb/devices/utils.py @@ -1,5 +1,6 @@ import numpy as np import socket +import sys import platform import serial @@ -161,3 +162,80 @@ def get_openbci_usb(): def serial_ports(): return serial.tools.list_ports.comports() + + +def get_ftdi_latency_ms(com_port: str): + """Read the FTDI VCP LatencyTimer (ms) for a COM port from the Windows registry. + + Returns the latency in ms, or None on non-Windows platforms or if the port + is not found under HKLM\\SYSTEM\\CurrentControlSet\\Enum\\FTDIBUS. + """ + if sys.platform != 'win32': + return None + import winreg + ftdi_root = r"SYSTEM\CurrentControlSet\Enum\FTDIBUS" + target = com_port.upper() + try: + root_key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, ftdi_root) + except OSError: + return None + try: + for i in range(1024): + try: + device_name = winreg.EnumKey(root_key, i) + except OSError: + break + device_path = f"{ftdi_root}\\{device_name}" + try: + device_key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, device_path) + except OSError: + continue + try: + for j in range(64): + try: + instance = winreg.EnumKey(device_key, j) + except OSError: + break + params_path = f"{device_path}\\{instance}\\Device Parameters" + try: + params_key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, params_path) + except OSError: + continue + try: + port_name, _ = winreg.QueryValueEx(params_key, "PortName") + if str(port_name).upper() == target: + latency, _ = winreg.QueryValueEx(params_key, "LatencyTimer") + return int(latency) + except OSError: + pass + finally: + params_key.Close() + finally: + device_key.Close() + finally: + root_key.Close() + return None + + +def assert_ftdi_latency_1ms(com_port: str) -> None: + """Assert the FTDI LatencyTimer for a COM port is 1 ms (Windows only). + + The OpenBCI Cyton dongle ships with the Windows default of 16 ms, which + adds ~15 ms of USB buffering jitter to every marker push and corrupts + stimulus/EEG alignment for VEP-class experiments. No-op on non-Windows. + + Fix in: Device Manager -> Ports -> USB Serial Port -> Properties -> + Port Settings -> Advanced -> Latency Timer (ms) = 1. + """ + if sys.platform != 'win32': + return + latency = get_ftdi_latency_ms(com_port) + assert latency is not None, ( + f"Could not read FTDI LatencyTimer for {com_port}. " + f"Verify it is an FTDI device in Device Manager." + ) + assert latency == 1, ( + f"FTDI LatencyTimer for {com_port} is {latency} ms; required 1 ms. " + f"Device Manager -> Ports -> USB Serial Port ({com_port}) -> " + f"Properties -> Port Settings -> Advanced -> Latency Timer (ms) = 1." + ) From f8ca6b4b48a6ca2667cd589c27c4eba07448c2be Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 20 Apr 2026 23:01:29 +1000 Subject: [PATCH 38/94] examples updates --- .../00x__pattern_reversal_run_experiment.py | 12 +- .../visual_vep/01r__pattern_reversal_viz.py | 251 ++-- ...r__pattern_reversal_viz_montage_type.ipynb | 1036 +++++++++++++++++ .../02r__pattern_reversal_longitudinal.py | 199 ---- 4 files changed, 1192 insertions(+), 306 deletions(-) create mode 100644 examples/visual_vep/01r__pattern_reversal_viz_montage_type.ipynb delete mode 100644 examples/visual_vep/02r__pattern_reversal_longitudinal.py diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index 0e4a86eed..9a16b3ef2 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -48,17 +48,17 @@ # Serial port: "COM3" for Windows, "/dev/ttyUSB0" for Linux serial_port = "COM3" -# Config: Only needed for Thinkpulse active electrodes, otherwise leave as None. -config = None #CYTON_CONFIG_GAIN_4X +# Config: CYTON_CONFIG_GAIN_4X needed for Thinkpulse active electrodes, otherwise leave as None. +config = None # Electrode montage type: "cap" or "mark-iv" -montage_type = "cap" #"mark-iv" -# Ground Fpz, Ref M1. -ch_names = ["Fp1", "Fp2", "T5", "T6", "O1", "O2", "Oz", "M2"] +montage_type = "cap" +# Ground M1, Ref Fz. +ch_names = ["Fp1", "Fp2", "T5", "T6", "O1", "O2", "Oz", "Pz"] # Subject and session identifiers subject_id = 0 -session_nb = 2 +session_nb = 7 ################################################################################################### # Initiate EEG device diff --git a/examples/visual_vep/01r__pattern_reversal_viz.py b/examples/visual_vep/01r__pattern_reversal_viz.py index 90f47e1d7..b63e991c2 100644 --- a/examples/visual_vep/01r__pattern_reversal_viz.py +++ b/examples/visual_vep/01r__pattern_reversal_viz.py @@ -3,14 +3,14 @@ ================================== This example demonstrates loading, organizing, and visualizing EP response data -from the visual Pattern Reversal VEP (PR-VEP) experiment. +from the Visual Pattern Reversal VEP (PR-VEP) experiment. An animation of a checkerboard reversal is shown (the checkerboard squares' colours are toggled once each half a second). The data used is the first subject and first session of the eeg-expy PR-VEP -example dataset, recorded using an OpenBCI Cyton EEG headset with electrodes -placed at (Fp1, Fp2, C3, C4, P7, P8, O1, O2) fitted around a Meta +example dataset, recorded using an OpenBCI Cyton with a Tencom 20 channel cap, with cup +electrodes placed at (Fp1, Fp2, T5, T6, O1, O2, Oz, Pz) fitted around a Meta Quest 2 headset. The session used the Meta Quest 2 linked with a PC to display the checkerboard reversal animation in VR at 120 Hz, alternating monocular stimulation between left and right eye across blocks. @@ -23,7 +23,6 @@ ``Epochs`` object, and then an ``Evoked`` object to obtain the trial-averaged response. The final figures show the P100 response ERP waveform, a comparison between eyes, and the interocular difference wave. - """ ################################################################################################### @@ -31,53 +30,85 @@ # ----- import os -import sys import numpy as np import warnings warnings.filterwarnings('ignore') -# Ensure Unicode characters (e.g. μ) print correctly on Windows terminals -if sys.stdout.encoding and sys.stdout.encoding.lower() != 'utf-8': - sys.stdout.reconfigure(encoding='utf-8', errors='replace') import matplotlib.pyplot as plt import pandas as pd -from glob import glob -from pathlib import Path -from mne import Epochs, find_events +from mne import Epochs, find_events, concatenate_raws from eegnb import get_recording_dir -from eegnb.analysis.utils import load_data +from eegnb.analysis.utils import load_csv_as_raw from eegnb.analysis.vep_utils import plot_vep - +from eegnb.devices.utils import EEG_INDICES, SAMPLE_FREQS # sphinx_gallery_thumbnail_number = 3 ################################################################################################### # Hardware lag definitions # ------------------------ # -# Known display-pipeline offsets for different setups, subtracted from software -# timestamps so that t=0 corresponds to actual photon delivery. +# Known display-pipeline offsets for different setups, subtracted from epoch +# times so t=0 corresponds to actual photon delivery on the user's retina. # +# The offset shifts the software marking time forward to account for the VR +# compositor look-ahead plus USB and panel latency, aligning the measured P100 +# to the clinical ~100 ms peak. -windows_cyton_lag = 0.0368 +# Ablation (vtfi-pipeline match): drop from 0.095 to 0.036. +# vtfi's same-hardware (Quest-2 + Cyton + Quest Link) notebooks use 0.036 as a +# measured constant; 0.095 here was a fit parameter chosen to land peaks near 100 ms. +quest_link_photon_lag = 0.09 ################################################################################################### # Load Data # --------- # # Download the PR-VEP example dataset if it is not already present locally. -# -raw = load_data(subject=0, session=0, - experiment='visual-PRVEP', site='quest-2_120Hz_mark-iv', device_name='cyton', - data_dir=os.getenv("DATA_DIR")) - -session_dir = get_recording_dir('cyton', 'visual-PRVEP', subject_id=0, session_nb=0, - site='quest-2_120Hz_mark-iv', - data_dir=os.getenv("DATA_DIR")) -timing_files = glob(str(session_dir / '*_timing.csv')) -timing_df = pd.concat([pd.read_csv(f) for f in timing_files], ignore_index=True) +session_dir = get_recording_dir('cyton', 'visual-PRVEP', subject_id=0, session_nb=6, site='quest-2_120Hz_cap', data_dir=os.getenv("DATA_DIR")) +csv_paths = sorted(p for p in session_dir.glob('recording_*.csv') + if not p.name.endswith('_timing.csv')) +print(f"\nFound {len(csv_paths)} recording(s) in {session_dir}") +for p in csv_paths: + print(f" {p.name}") + +# Load each recording separately so events can be aligned 1:1 with its +# timing sidecar . a trailing marker pushed after the EEG stream closes leaves +# one extra timing row, which we truncate per-file before concatenation. +per_recording = [] +for p in csv_paths: + rec_raw = load_csv_as_raw([str(p)], sfreq=SAMPLE_FREQS['cyton'], ch_ind=EEG_INDICES['cyton']) + rec_timing = pd.read_csv(p.parent / f'{p.stem}_timing.csv') + rec_events = find_events(rec_raw, shortest_event=1, verbose=False) + n = min(len(rec_events), len(rec_timing)) + if len(rec_events) != len(rec_timing): + print(f"[warn] {p.name}: events={len(rec_events)}, timing={len(rec_timing)} . truncating to {n}") + per_recording.append({ + 'raw': rec_raw, + 'events': rec_events[:n], + 'timing': rec_timing.iloc[:n].reset_index(drop=True), + }) + +raw, events = concatenate_raws( + [rec['raw'] for rec in per_recording], + events_list=[rec['events'] for rec in per_recording], +) +timing_df = pd.concat([rec['timing'] for rec in per_recording], ignore_index=True) +assert len(events) == len(timing_df), "per-file truncation should keep events and timing aligned" + +def log_channel_stats(label, data_uV, ch_names): + """data_uV: (n_channels, n_samples) in uV. Prints std, median-abs, max-abs per channel.""" + print(f"\n[{label}] per-channel stats (uV)") + print(f" {'ch':<6}{'std':>10}{'med|x|':>10}{'max|x|':>12}") + for i, ch in enumerate(ch_names): + x = data_uV[i] + print(f" {ch:<6}{np.std(x):>10.2f}{np.median(np.abs(x)):>10.2f}{np.max(np.abs(x)):>12.2f}") + +print(f"\n[raw] sfreq={raw.info['sfreq']} Hz, n_samples={raw.n_times}, duration={raw.times[-1]:.1f}s") +print(f"[raw] channels: {raw.ch_names}") +log_channel_stats('raw (pre-filter)', raw.get_data(picks='eeg') * 1e6, raw.copy().pick('eeg').ch_names) ################################################################################################### # Visualize the power spectrum @@ -89,95 +120,113 @@ # Filtering # --------- # -# Use FIR rather than IIR to keep linear phase. -# +# Use FIR rather than IIR to keep linear phase. IIR's frequency-dependent group +# delay would shift the P100 peak by an amount that depends on its spectral +# content, contaminating latency measurements. FIR applies the same delay to +# every frequency, and MNE's zero-phase filtering cancels even that constant +# shift so the filtered P100 sits at the same sample as the unfiltered one. + +# Ablation: 1 Hz HP (vtfi pipeline) instead of 2 Hz. Clinical PRVEP and the working +# vtfi notebooks all use 1 Hz; the 2 Hz cut may have been flattening P100's slow shoulder. +hp, lp = 1, 30 +raw.filter(hp, lp, method='fir') +# raw.plot_psd(fmin=hp, fmax=lp) +log_channel_stats(f'post-filter {hp}-{lp} Hz', raw.get_data(picks='eeg') * 1e6, raw.copy().pick('eeg').ch_names) -raw.filter(1, 30, method='fir') -raw.plot_psd(fmin=1, fmax=30) +################################################################################################### +# Per-trial compositor-lookahead correction +# ----------------------------------------- +# +# Each event sample index is shifted by the per-trial variation in the Quest +# compositor's predicted_display_time, correcting trial-by-trial timing jitter. +# The residual absolute offset is captured in quest_link_photon_lag. + +offsets_s = timing_df['predicted_display_time'].values - timing_df['software_time'].values +rel_offsets_s = offsets_s - offsets_s.mean() +sample_shifts = np.round(rel_offsets_s * raw.info['sfreq']).astype(int) +print(f"\n[lookahead] per-trial compositor jitter (ms): " + f"min={rel_offsets_s.min()*1000:+.2f} " + f"max={rel_offsets_s.max()*1000:+.2f} " + f"std={rel_offsets_s.std()*1000:.2f} " + f"|shift| samples: max={np.abs(sample_shifts).max()}") +# Ablation: per-trial jitter correction DISABLED. The vtfi pipeline does not apply +# this and produces clean P100s on the same hardware. predicted_display_time is in +# OpenXR time and software_time in Unix epoch; only their per-trial variation around +# the mean is meaningful, but if that variation is dominated by noise rather than +# real compositor jitter, the correction scatters trials and washes out the average. +# events[:, 0] += sample_shifts ################################################################################################### # Epoching # -------- # # Epoch around stimulus onsets, separating left- and right-eye trials. -# -events = find_events(raw) event_id = {'left_eye': 1, 'right_eye': 2} - -epochs = Epochs(raw, events=events, event_id=event_id, - tmin=-0.1, tmax=0.4, baseline=(None, 0), - reject={'eeg': 65e-6}, preload=True, - verbose=False, picks=['POz', 'Oz'], - metadata=timing_df) - -epochs.shift_time(-windows_cyton_lag) -print('sample drop %: ', (1 - len(epochs.events)/len(events)) * 100) +print(f"\n[events] total={len(events)}, " + f"left_eye={int((events[:, 2] == 1).sum())}, " + f"right_eye={int((events[:, 2] == 2).sum())}") +epoch_metadata = timing_df + +# Oz is the ISCEV-standard electrode. +PICK_CH = 'Pz' +REJECT_UV = 35e-6 +ch_epochs = Epochs(raw, events=events, event_id=event_id, + tmin=-0.1, tmax=0.4, baseline=None, + reject={'eeg': REJECT_UV}, + preload=True, + verbose=False, picks=[PICK_CH], + metadata=epoch_metadata, + event_repeated='drop') +ch_epochs.shift_time(-quest_link_photon_lag) + +n_left = len(ch_epochs['left_eye']) +n_right = len(ch_epochs['right_eye']) +n_total = n_left + n_right +drop_pct = (1 - n_total / len(events)) * 100 +print(f"\n[{PICK_CH} epochs] reject ptp = {REJECT_UV * 1e6:.0f} uV") +print(f" kept {n_total}/{len(events)} " + f"(left={n_left}, right={n_right}) drop={drop_pct:.1f}%") + +# Peak-to-peak distribution on surviving epochs. +ch_ptp = np.ptp(ch_epochs.get_data(picks=[PICK_CH])[:, 0, :] * 1e6, axis=-1) +print(f" {PICK_CH} ptp uV: min={ch_ptp.min():.1f} median={np.median(ch_ptp):.1f} " + f"p90={np.percentile(ch_ptp, 90):.1f} max={ch_ptp.max():.1f}") ################################################################################################### -# Epoch average -# ------------- - -evoked = epochs.average() -evoked.plot(spatial_colors=True, show=False) +# Oz evoked per eye +# ----------------- -evoked_potentials_left = epochs['left_eye'].average(picks=['Oz']) -plot_vep(evoked_potentials_left) +evoked_left = ch_epochs['left_eye'].average(picks=[PICK_CH]) +evoked_right = ch_epochs['right_eye'].average(picks=[PICK_CH]) -evoked_potentials_right = epochs['right_eye'].average(picks=['Oz']) -plot_vep(evoked_potentials_right) - -################################################################################################### -# Compare evoked potentials by eye -# --------------------------------- - -evoked_left = epochs['left_eye'].average(picks=['POz']) -evoked_right = epochs['right_eye'].average(picks=['POz']) - -fig, ax = plt.subplots(figsize=(10, 6)) times = evoked_left.times * 1000 left_data = evoked_left.data[0] * 1e6 right_data = evoked_right.data[0] * 1e6 -ax.plot(times, left_data, label='Left Eye', color='blue', linewidth=2) -ax.plot(times, right_data, label='Right Eye', color='red', linewidth=2) -ax.set_xlabel('Time (ms)') -ax.set_ylabel('Amplitude (μV)') -ax.set_title('Comparison of Evoked Potentials: Left Eye vs Right Eye') -ax.legend() -ax.grid(True, alpha=0.3) -ax.axhline(y=0, color='black', linestyle='-', alpha=0.3) -ax.axvline(x=0, color='black', linestyle='--', alpha=0.5, label='Stimulus Onset') -plt.tight_layout() -plt.show() - -print(f"Left eye - Number of epochs: {len(epochs['left_eye'])}") -print(f"Right eye - Number of epochs: {len(epochs['right_eye'])}") - -p100_window = (80, 120) -time_mask = (times >= p100_window[0]) & (times <= p100_window[1]) - -left_p100_idx = np.argmax(left_data[time_mask]) -right_p100_idx = np.argmax(right_data[time_mask]) - -print(f"\nP100 Peak Analysis:") -print(f"Left eye - Peak at {times[time_mask][left_p100_idx]:.1f}ms, amplitude: {left_data[time_mask][left_p100_idx]:.2f}μV") -print(f"Right eye - Peak at {times[time_mask][right_p100_idx]:.1f}ms, amplitude: {right_data[time_mask][right_p100_idx]:.2f}μV") - -################################################################################################### -# Interocular difference wave -# --------------------------- - -difference_data = left_data - right_data - -fig, ax = plt.subplots(figsize=(10, 6)) -ax.plot(times, difference_data, label='Left - Right', color='green', linewidth=2) -ax.set_xlabel('Time (ms)') -ax.set_ylabel('Amplitude Difference (μV)') -ax.set_title('Difference Wave: Left Eye - Right Eye') -ax.grid(True, alpha=0.3) -ax.axhline(y=0, color='black', linestyle='-', alpha=0.3) -ax.axvline(x=0, color='black', linestyle='--', alpha=0.5, label='Stimulus Onset') -ax.legend() -plt.tight_layout() -plt.show() +LANDMARK_MS = [75, 100, 145] # N75, P100, N145 +LANDMARK_COLORS = ['#888888', 'red', '#555555'] +LANDMARK_LABELS = ['N75 (75 ms)', 'P100 (100 ms)', 'N145 (145 ms)'] + +def plot_ch(ax, data, title, color): + ax.plot(times, data, color=color, linewidth=2) + ax.set_xlabel('Time (ms)') + ax.set_ylabel('Amplitude (uV)') + ax.set_title(title) + ax.grid(True, alpha=0.3) + ax.axhline(y=0, color='black', linestyle='-', alpha=0.3) + ax.axvline(x=0, color='black', linestyle='--', alpha=0.5) + for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) + ax.legend(fontsize=8, loc='upper right') + +fig_l, ax_l = plt.subplots(figsize=(10, 6)) +plot_ch(ax_l, left_data, f'Left Eye . {PICK_CH} (n={len(ch_epochs["left_eye"])})', 'blue') +fig_l.tight_layout() + +plot_vep(evoked_left) + +fig_r, ax_r = plt.subplots(figsize=(10, 6)) +plot_ch(ax_r, right_data, f'Right Eye . {PICK_CH} (n={len(ch_epochs["right_eye"])})', 'red') +fig_r.tight_layout() +plot_vep(evoked_right) diff --git a/examples/visual_vep/01r__pattern_reversal_viz_montage_type.ipynb b/examples/visual_vep/01r__pattern_reversal_viz_montage_type.ipynb new file mode 100644 index 000000000..678459c90 --- /dev/null +++ b/examples/visual_vep/01r__pattern_reversal_viz_montage_type.ipynb @@ -0,0 +1,1036 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 375, + "metadata": { + "collapsed": false, + "execution": { + "iopub.execute_input": "2026-04-20T10:38:53.797170Z", + "iopub.status.busy": "2026-04-20T10:38:53.797170Z", + "iopub.status.idle": "2026-04-20T10:38:54.244338Z", + "shell.execute_reply": "2026-04-20T10:38:54.243188Z" + } + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Pattern Reversal VEP Visualization\n", + "\n", + "This example demonstrates loading, organizing, and visualizing EP response data\n", + "from the Visual Pattern Reversal VEP (PR-VEP) experiment.\n", + "\n", + "An animation of a checkerboard reversal is shown (the checkerboard squares'\n", + "colours are toggled once each half a second).\n", + "\n", + "The data used is the first subject and first session of the eeg-expy PR-VEP\n", + "example dataset, recorded using an OpenBCI Cyton with a Tencom 20 channel cap, with cup \n", + "electrodes placed at (Fp1, Fp2, T5, T6, O1, O2, Oz, M2) fitted around a Meta\n", + "Quest 2 headset. The session used the Meta Quest 2 linked with a PC to\n", + "display the checkerboard reversal animation in VR at 120 Hz, alternating\n", + "monocular stimulation between left and right eye across blocks.\n", + "\n", + "We first use ``fetch_dataset`` to obtain the data files. If the files are not\n", + "already present in the local data directory they will be downloaded from the\n", + "cloud.\n", + "\n", + "After loading the data from the occipital channels, we place it in an MNE\n", + "``Epochs`` object, and then an ``Evoked`` object to obtain the trial-averaged\n", + "response. The final figures show the P100 response ERP waveform, a comparison\n", + "between eyes, and the interocular difference wave.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 376, + "metadata": { + "collapsed": false, + "execution": { + "iopub.execute_input": "2026-04-20T10:38:54.246374Z", + "iopub.status.busy": "2026-04-20T10:38:54.245871Z", + "iopub.status.idle": "2026-04-20T10:38:55.485162Z", + "shell.execute_reply": "2026-04-20T10:38:55.484064Z" + } + }, + "outputs": [], + "source": [ + "import os\n", + "import numpy as np\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "\n", + "from mne import Epochs, find_events, concatenate_raws\n", + "\n", + "from eegnb import get_recording_dir\n", + "from eegnb.analysis.utils import load_csv_as_raw\n", + "from eegnb.analysis.vep_utils import plot_vep\n", + "from eegnb.devices.utils import EEG_INDICES, SAMPLE_FREQS\n", + "# sphinx_gallery_thumbnail_number = 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Hardware lag definitions\n", + "\n", + "Known display-pipeline offsets for different setups, subtracted from epoch\n", + "times so t=0 corresponds to actual photon delivery on the user's retina.\n", + "\n", + "The offset shifts the software marking time forward to account for the VR\n", + "compositor look-ahead plus USB and panel latency, aligning the measured P100\n", + "to the clinical ~100 ms peak.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 377, + "metadata": { + "collapsed": false, + "execution": { + "iopub.execute_input": "2026-04-20T10:38:55.486166Z", + "iopub.status.busy": "2026-04-20T10:38:55.486166Z", + "iopub.status.idle": "2026-04-20T10:38:55.501157Z", + "shell.execute_reply": "2026-04-20T10:38:55.500063Z" + } + }, + "outputs": [], + "source": [ + "quest_link_photon_lag = 0.1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Data\n", + "\n", + "Download the PR-VEP example dataset if it is not already present locally.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 378, + "metadata": { + "collapsed": false, + "execution": { + "iopub.execute_input": "2026-04-20T10:38:55.503202Z", + "iopub.status.busy": "2026-04-20T10:38:55.503202Z", + "iopub.status.idle": "2026-04-20T10:38:55.656702Z", + "shell.execute_reply": "2026-04-20T10:38:55.656197Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Found 1 recording(s) in C:\\Users\\pelle\\.eegnb\\data\\visual-PRVEP\\quest-2_120Hz_cap\\cyton\\subject0000\\session006\n", + " recording_2026-04-20-10.16.43.csv\n", + "\n", + "\n", + "Loading these files: \n", + "\n", + "C:\\Users\\pelle\\.eegnb\\data\\visual-PRVEP\\quest-2_120Hz_cap\\cyton\\subject0000\\session006\\recording_2026-04-20-10.16.43.csv\n", + "\n", + "\n", + "\n", + "\n", + "['Fp1', 'Fp2', 'T5', 'T6', 'O1', 'O2', 'Oz', 'Pz', 'stim']\n", + "['Fp1', 'Fp2', 'T5', 'T6', 'O1', 'O2', 'Oz', 'Pz', 'stim']\n", + "Creating RawArray with float64 data, n_channels=9, n_times=107310\n", + " Range : 0 ... 107309 = 0.000 ... 429.236 secs\n", + "Ready.\n", + "\n", + "[raw] sfreq=250.0 Hz, n_samples=107310, duration=429.2s\n", + "[raw] channels: ['Fp1', 'Fp2', 'T5', 'T6', 'O1', 'O2', 'Oz', 'Pz', 'stim']\n", + "\n", + "[raw (pre-filter)] per-channel stats (uV)\n", + " ch std med|x| max|x|\n", + " Fp1 530.16 41126.14 42050.27\n", + " Fp2 217.72 35935.93 36781.09\n", + " T5 243.38 8042.83 8594.56\n", + " T6 7610.38 26502.41 34369.45\n", + " O1 2324.53 106495.75 108492.48\n", + " O2 115.86 7272.61 7631.31\n", + " Oz 142.44 81171.27 81584.22\n", + " Pz 1099.70 46624.62 49031.75\n" + ] + } + ], + "source": [ + "\n", + "session_dir = get_recording_dir('cyton', 'visual-PRVEP', subject_id=0, session_nb=6, site='quest-2_120Hz_cap', data_dir=os.getenv(\"DATA_DIR\"))\n", + "csv_paths = sorted(p for p in session_dir.glob('recording_*.csv')\n", + " if not p.name.endswith('_timing.csv'))\n", + "print(f\"\\nFound {len(csv_paths)} recording(s) in {session_dir}\")\n", + "for p in csv_paths:\n", + " print(f\" {p.name}\")\n", + "\n", + "# Load each recording separately so events can be aligned 1:1 with its\n", + "# timing sidecar . a trailing marker pushed after the EEG stream closes leaves\n", + "# one extra timing row, which we truncate per-file before concatenation.\n", + "per_recording = []\n", + "for p in csv_paths:\n", + " rec_raw = load_csv_as_raw([str(p)], sfreq=SAMPLE_FREQS['cyton'], ch_ind=EEG_INDICES['cyton'])\n", + " rec_timing = pd.read_csv(p.parent / f'{p.stem}_timing.csv')\n", + " rec_events = find_events(rec_raw, shortest_event=1, verbose=False)\n", + " n = min(len(rec_events), len(rec_timing))\n", + " if len(rec_events) != len(rec_timing):\n", + " print(f\"[warn] {p.name}: events={len(rec_events)}, timing={len(rec_timing)} . truncating to {n}\")\n", + " per_recording.append({\n", + " 'raw': rec_raw,\n", + " 'events': rec_events[:n],\n", + " 'timing': rec_timing.iloc[:n].reset_index(drop=True),\n", + " })\n", + "\n", + "raw, events = concatenate_raws(\n", + " [rec['raw'] for rec in per_recording],\n", + " events_list=[rec['events'] for rec in per_recording],\n", + ")\n", + "timing_df = pd.concat([rec['timing'] for rec in per_recording], ignore_index=True)\n", + "assert len(events) == len(timing_df), \"per-file truncation should keep events and timing aligned\"\n", + "\n", + "def log_channel_stats(label, data_uV, ch_names):\n", + " \"\"\"data_uV: (n_channels, n_samples) in uV. Prints std, median-abs, max-abs per channel.\"\"\"\n", + " print(f\"\\n[{label}] per-channel stats (uV)\")\n", + " print(f\" {'ch':<6}{'std':>10}{'med|x|':>10}{'max|x|':>12}\")\n", + " for i, ch in enumerate(ch_names):\n", + " x = data_uV[i]\n", + " print(f\" {ch:<6}{np.std(x):>10.2f}{np.median(np.abs(x)):>10.2f}{np.max(np.abs(x)):>12.2f}\")\n", + "\n", + "\n", + "print(f\"\\n[raw] sfreq={raw.info['sfreq']} Hz, n_samples={raw.n_times}, duration={raw.times[-1]:.1f}s\")\n", + "print(f\"[raw] channels: {raw.ch_names}\")\n", + "log_channel_stats('raw (pre-filter)', raw.get_data(picks='eeg') * 1e6, raw.copy().pick('eeg').ch_names)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualize the power spectrum\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 379, + "metadata": { + "collapsed": false, + "execution": { + "iopub.execute_input": "2026-04-20T10:38:55.658708Z", + "iopub.status.busy": "2026-04-20T10:38:55.658708Z", + "iopub.status.idle": "2026-04-20T10:38:56.154617Z", + "shell.execute_reply": "2026-04-20T10:38:56.154058Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "NOTE: plot_psd() is a legacy function. New code should use .compute_psd().plot().\n", + "Effective window size : 8.192 (s)\n", + "Plotting power spectral density (dB=True).\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "execution_count": 379, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "raw.plot_psd()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Filtering\n", + "\n", + "Use FIR rather than IIR to keep linear phase. IIR's frequency-dependent group\n", + "delay would shift the P100 peak by an amount that depends on its spectral\n", + "content, contaminating latency measurements. FIR applies the same delay to\n", + "every frequency, and MNE's zero-phase filtering cancels even that constant\n", + "shift so the filtered P100 sits at the same sample as the unfiltered one.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 380, + "metadata": { + "collapsed": false, + "execution": { + "iopub.execute_input": "2026-04-20T10:38:56.156129Z", + "iopub.status.busy": "2026-04-20T10:38:56.156129Z", + "iopub.status.idle": "2026-04-20T10:38:56.247148Z", + "shell.execute_reply": "2026-04-20T10:38:56.246642Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Filtering raw data in 1 contiguous segment\n", + "Setting up band-pass filter from 1 - 30 Hz\n", + "\n", + "FIR filter parameters\n", + "---------------------\n", + "Designing a one-pass, zero-phase, non-causal bandpass filter:\n", + "- Windowed time-domain design (firwin) method\n", + "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n", + "- Lower passband edge: 1.00\n", + "- Lower transition bandwidth: 1.00 Hz (-6 dB cutoff frequency: 0.50 Hz)\n", + "- Upper passband edge: 30.00 Hz\n", + "- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)\n", + "- Filter length: 825 samples (3.300 s)\n", + "\n", + "NOTE: plot_psd() is a legacy function. New code should use .compute_psd().plot().\n", + "Effective window size : 8.192 (s)\n", + "Plotting power spectral density (dB=True).\n", + "\n", + "[post-filter 1-30 Hz] per-channel stats (uV)\n", + " ch std med|x| max|x|\n", + " Fp1 14.37 4.77 180.98\n", + " Fp2 12.33 3.85 176.96\n", + " T5 28.26 12.58 339.92\n", + " T6 270.31 36.96 4608.44\n", + " O1 38.08 9.22 1731.93\n", + " O2 17.64 10.09 470.42\n", + " Oz 8.49 4.72 83.95\n", + " Pz 6.72 3.51 69.31\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "hp, lp = 1, 30\n", + "raw.filter(hp, lp, method='fir')\n", + "raw.plot_psd(fmin=hp, fmax=lp)\n", + "log_channel_stats(f'post-filter {hp}-{lp} Hz', raw.get_data(picks='eeg') * 1e6, raw.copy().pick('eeg').ch_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Per-trial compositor-lookahead correction\n", + "\n", + "Each event sample index is shifted by the per-trial variation in the Quest\n", + "compositor's predicted_display_time, correcting trial-by-trial timing jitter.\n", + "The residual absolute offset is captured in quest_link_photon_lag." + ] + }, + { + "cell_type": "code", + "execution_count": 381, + "metadata": { + "collapsed": false, + "execution": { + "iopub.execute_input": "2026-04-20T10:38:56.265444Z", + "iopub.status.busy": "2026-04-20T10:38:56.265444Z", + "iopub.status.idle": "2026-04-20T10:38:56.279331Z", + "shell.execute_reply": "2026-04-20T10:38:56.278239Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[lookahead] per-trial compositor jitter (ms): min=-32.15 max=+13.15 std=4.07 |shift| samples: max=8\n" + ] + } + ], + "source": [ + "offsets_s = timing_df['predicted_display_time'].values - timing_df['software_time'].values\n", + "rel_offsets_s = offsets_s - offsets_s.mean()\n", + "sample_shifts = np.round(rel_offsets_s * raw.info['sfreq']).astype(int)\n", + "print(f\"\\n[lookahead] per-trial compositor jitter (ms): \"\n", + " f\"min={rel_offsets_s.min()*1000:+.2f} \"\n", + " f\"max={rel_offsets_s.max()*1000:+.2f} \"\n", + " f\"std={rel_offsets_s.std()*1000:.2f} \"\n", + " f\"|shift| samples: max={np.abs(sample_shifts).max()}\")\n", + "# Per-trial jitter-corrected event array. Kept separate from the raw `events` so\n", + "# both can be overlaid on evoked plots (raw = solid, corrected = dashed) to\n", + "# show side-by-side whether the per-trial compositor-lookahead shift helps.\n", + "events_corrected = events.copy()\n", + "events_corrected[:, 0] += sample_shifts" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Epoching\n", + "\n", + "Epoch around stimulus onsets, separating left- and right-eye trials.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 382, + "metadata": { + "collapsed": false, + "execution": { + "iopub.execute_input": "2026-04-20T10:38:56.280331Z", + "iopub.status.busy": "2026-04-20T10:38:56.280331Z", + "iopub.status.idle": "2026-04-20T10:38:56.357049Z", + "shell.execute_reply": "2026-04-20T10:38:56.356419Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[events] total=800, left_eye=400, right_eye=400\n", + "\n", + "[Pz epochs] reject ptp = 35 uV\n", + " kept 734/800 (left=362, right=372) drop=8.3%\n", + " Pz ptp uV: min=10.1 median=19.9 p90=28.3 max=34.8\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "
\n", + " \n", + " \n", + " General\n", + "
MNE object typeEpochs
Measurement dateUnknown
ParticipantUnknown
ExperimenterUnknown
\n", + " \n", + " \n", + " Acquisition\n", + "
Total number of events734
Events counts\n", + " \n", + " left_eye: 362\n", + "
\n", + " \n", + " right_eye: 372\n", + " \n", + " \n", + "
Time range-0.200 – 0.300 s
Baselineoff
Sampling frequency250.00 Hz
Time points126
Metadata734 rows × 5 columns
\n", + " \n", + " \n", + " Channels\n", + "
EEG\n", + " \n", + "\n", + " \n", + "
Head & sensor digitization11 points
\n", + " \n", + " \n", + " Filters\n", + "
Highpass1.00 Hz
Lowpass30.00 Hz
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 382, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "event_id = {'left_eye': 1, 'right_eye': 2}\n", + "print(f\"\\n[events] total={len(events)}, \"\n", + " f\"left_eye={int((events[:, 2] == 1).sum())}, \"\n", + " f\"right_eye={int((events[:, 2] == 2).sum())}\")\n", + "epoch_metadata = timing_df\n", + "\n", + "# Oz is the ISCEV-standard electrode.\n", + "PICK_CH = 'Pz'\n", + "REJECT_UV = 35e-6\n", + "ch_epochs = Epochs(raw, events=events, event_id=event_id,\n", + " tmin=-0.1, tmax=0.4, baseline=None,\n", + " reject={'eeg': REJECT_UV},\n", + " preload=True,\n", + " verbose=False, picks=[PICK_CH],\n", + " metadata=epoch_metadata,\n", + " event_repeated='drop')\n", + "ch_epochs.shift_time(-quest_link_photon_lag)\n", + "\n", + "n_left = len(ch_epochs['left_eye'])\n", + "n_right = len(ch_epochs['right_eye'])\n", + "n_total = n_left + n_right\n", + "drop_pct = (1 - n_total / len(events)) * 100\n", + "print(f\"\\n[{PICK_CH} epochs] reject ptp = {REJECT_UV * 1e6:.0f} uV\")\n", + "print(f\" kept {n_total}/{len(events)} \"\n", + " f\"(left={n_left}, right={n_right}) drop={drop_pct:.1f}%\")\n", + "\n", + "# Peak-to-peak distribution on surviving epochs.\n", + "ch_ptp = np.ptp(ch_epochs.get_data(picks=[PICK_CH])[:, 0, :] * 1e6, axis=-1)\n", + "print(f\" {PICK_CH} ptp uV: min={ch_ptp.min():.1f} median={np.median(ch_ptp):.1f} \"\n", + " f\"p90={np.percentile(ch_ptp, 90):.1f} max={ch_ptp.max():.1f}\")\n", + "\n", + "# Corrected-events epochs on the same trial set (ch_epochs.selection) for overlay.\n", + "ch_epochs_corr = Epochs(raw, events=events_corrected[ch_epochs.selection],\n", + " event_id=event_id, tmin=-0.1, tmax=0.4, baseline=None,\n", + " reject=None, preload=True, verbose=False, picks=[PICK_CH],\n", + " metadata=epoch_metadata.iloc[ch_epochs.selection].reset_index(drop=True),\n", + " event_repeated='drop')\n", + "ch_epochs_corr.shift_time(-quest_link_photon_lag)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Oz evoked per eye\n" + ] + }, + { + "cell_type": "code", + "execution_count": 383, + "metadata": { + "collapsed": false, + "execution": { + "iopub.execute_input": "2026-04-20T10:38:56.359555Z", + "iopub.status.busy": "2026-04-20T10:38:56.359555Z", + "iopub.status.idle": "2026-04-20T10:38:57.042673Z", + "shell.execute_reply": "2026-04-20T10:38:57.042103Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "N75 Peak of -4.09 µV at 21.59 ms in peak_channel Pz\n", + "P100 Peak of 0.13 µV at 106.16 ms in peak_channel Pz\n", + "N145 Peak of -1.08 µV at 132.79 ms in peak_channel Pz\n", + "Need more than one channel to make topography for eeg. Disabling interactivity.\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "execution_count": 383, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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B+X+DVqUZNRr1BHkyycXnnxSrUZhMobHmgJGPTfddJPdu0GILUREuNbPnxdJStIp1omJOJ/ZuWfBCT9yQgghhBBCCLHRcMvMlyFiTFFsD8zjIYQQQgghhBAvsG/fPqlXr550795drr++h/Ts2U369OkvW7ZsS3O/2bNny7hxo8V0O4qPj5dHH31UunTpIl27dpX169en3hf9iNH3uGPHjvLZZ59l+tqvvfZamscdOnRI9VC28vXXX6vn79ixo7z11lupt2/btk1uuOEG6dSpk9x7771yDoregzz88MNqf5wEhTEhhBBCCCGEeIlSpUrJV199JTNmzJX33psvHTpcJ6NHP6L+FxsbK6+88oo899xzaR4zY8YnEheXLAsXLpI33nhDHnnkEUlISJDNmzfL559/roT0nDlz5OOPP5YdO3Zc9JoQtrt375bLLrtMbf/www9yyy23yH+wwk4B6y+//LIS2gsXLpS1a9fKTz/9lCpcR44cKYsXL5bq1avLpEmTPPqZDB06VJ5//nlxEhTGhBBCgpbk5GQ5efKkWk6cOKG2if+C7+/8+fOpi6O+z+RkCTl2TC1y9CitZ1PAd3T69OnUxVHfGQkcYPeMiKe7S0bHIYqA09/PWEu7CdKly5QRadfuCiVawS+//KKOewhRA2qNv/lmmbRu3VPVHNeoUUNKly4t69atk2XLlsm1114r0dHRyrgO64j6pmfq1KnSo0eP1G2I6TfffDPNfVasWCFXXHGFFCtWTCIiItT9Fy1aJAcOHFC/x+bNm6v79e3bV92entGjR8vTTz8tvXv3lvbt28u8efNkxIgR0qFDh1TR+88//0i/fv2kV69e6nl+//13dXudOnVUNH3Xrl3iFJjBTgghJGjBTL2ZBYcR15gxY5Q7NfFPEE1Zvnx56jYGahjsOYLz5yXfM8/odeRKTpggEh0twU5cXJz873//S90eNGiQ+i0S4lEWLxZZsMD9+7/++sW/zzFjtDi2ct11It265WhXIiKSZMGCudKkSRO1DcNALIj+GmBaf+zYISWGIZJN1PngwYMq/bh+/fqp98V9NmzYkOY1ILQhoJ944onU2955552L9uXw4cPqeQ2lSpVSz48Fz5v+9ozA7Yhez507V5599ln55ptv1G/46quvViL5k08+UanaAwcOlNWrV8tvv/0mjRs3Vo9t1qyZOmdXrVpV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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "evoked_left = ch_epochs['left_eye'].average(picks=[PICK_CH])\n", + "evoked_right = ch_epochs['right_eye'].average(picks=[PICK_CH])\n", + "\n", + "times = evoked_left.times * 1000\n", + "left_data = evoked_left.data[0] * 1e6\n", + "right_data = evoked_right.data[0] * 1e6\n", + "\n", + "LANDMARK_MS = [75, 100, 145] # N75, P100, N145\n", + "LANDMARK_COLORS = ['#888888', 'red', '#555555']\n", + "LANDMARK_LABELS = ['N75 (75 ms)', 'P100 (100 ms)', 'N145 (145 ms)']\n", + "\n", + "\n", + "def plot_ch(ax, data, title, color):\n", + " ax.plot(times, data, color=color, linewidth=2)\n", + " ax.set_xlabel('Time (ms)')\n", + " ax.set_ylabel('Amplitude (uV)')\n", + " ax.set_title(title)\n", + " ax.grid(True, alpha=0.3)\n", + " ax.axhline(y=0, color='black', linestyle='-', alpha=0.3)\n", + " ax.axvline(x=0, color='black', linestyle='--', alpha=0.5)\n", + " for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS):\n", + " ax.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl)\n", + " ax.legend(fontsize=8, loc='upper right')\n", + "\n", + "\n", + "evoked_left_corr = ch_epochs_corr['left_eye'].average(picks=[PICK_CH])\n", + "evoked_right_corr = ch_epochs_corr['right_eye'].average(picks=[PICK_CH])\n", + "left_corr = evoked_left_corr.data[0] * 1e6\n", + "right_corr = evoked_right_corr.data[0] * 1e6\n", + "\n", + "fig_l, ax_l = plt.subplots(figsize=(10, 6))\n", + "plot_ch(ax_l, left_corr, f'Left Eye . {PICK_CH} (n={len(ch_epochs[\"left_eye\"])})', 'blue')\n", + "ax_l.plot(times, left_data, color='blue', linestyle=':', alpha=0.6, linewidth=1.6, label='raw (uncorrected)')\n", + "ax_l.legend(fontsize=8, loc='upper right')\n", + "fig_l.tight_layout()\n", + "\n", + "plot_vep(evoked_left_corr)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 384, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "N75 Peak of -0.06 µV at 67.17 ms in peak_channel Pz\n", + "P100 Peak of 0.47 µV at 94.6 ms in peak_channel Pz\n", + "N145 Peak of -1.03 µV at 148.62 ms in peak_channel Pz\n", + "Need more than one channel to make topography for eeg. Disabling interactivity.\n" + ] + }, + { + "data": { + "image/png": "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8Ua78MIL7fTTT7fzzjvPunXrZvPnz3e/nzdvXgZLq7Zt27qfuT9QzeKdd97p7vviiy/szTfftFatWlnlypWtVq1a9r///c9+//1397i3337brrzySve7888/3/1u7dq1lsroSCWEEBEgb968ri5qz5492YpATjYNGjSI2b6JFGHHjn9vwVKkCI7xGe/btInW4OAn8WQe1UizUijd7cwhjrA91IwZM+y2225zZvhVqlSxM844w9asWeM+V4i/oUOHOtHXpEkT+/DDD53zAPZWRxxxRFCz2J955hl77733rGLFiu55CxcudK+J8Lzsssvc9vkdAvXzzz93v1u8eLHNmjUrZUc2pqxY/PHHH23UqFHuKoOr+Pz587v6oNatW9sll1wS790TQqRwdLFq1apZPo6oxaBBg2K2XyJF4D3Tt2/wj9+wwaxo0Yz3lS79r2AMhnbtzMaNy3jfiy+atW8f/D4sXmxWubJFkscff9xdmHGOR7B5TJo0ye6//3574oknnHB75JFHrGnTpk4s3nTTTVazZs2gto9QpKaxWbNm7ue1a9dao0aNbOnSpU4oDhkyxC699FL3u7/++ssJSMTqnDlzUvYiMCXFIgt9yy232O7du+3EE0+0OnXqOMHIFQDikSL0Bx54IN67KYRIUXPurMTiP//8Y+vWrbNjjz02pvsmRKrA5wdKlSqV4f4rrrjCduzY4T5bwc489keNGjX2C0U45phjrHr16i5KWbt27f1C0XNB4HP/+uuv24oVKyxVSbmaxS1btthdd93lhCJfuYIfPny4u+KYOHGiFS5c2H0/e/bseO+qECLFoLYpu0kuixYtyjbyKIQIjBchJFNIBJDP3K5du+yQQw6xdu3aueheToUiUIuYmeLFi7uvpJ8z45nr79y501KVlIssUrOwceNG92a6jskBPlSqVMmFogcPHmzTpk2zhg0bxm0/hRCpB/VQ2Xktkh67+OKLY7ZPIoW4806zHj1Cq1nMzMqVodUsZqZNGzOfqFtQNYsRpl+/fi57SCPKmDFj3K1AgQLuYo2oH6VmCMecUsTP/y3Xf+KzWLFiAX+XyqScWCSiiPIn9eyPsmXLuq9eV5MQIgngYOx7AE/ggzMpK6ZGBEozUwZD1iOlSaL1Siry5//3Fg7+BGQoICD9icgYUqJECZchpKnk/fffd5HFJUuWuO+5vfzyyzZ6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", + "text/plain": [ + "
" + ] + }, + "execution_count": 384, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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sVq1auV5zNNPP+2eR0FJ586d3e0HH3zgDvT60N1xxx0V/MqRbLfffrs99thjrq0UFhgvWrTIzjvvvNy2tc8++9jXX3/tDqgNGzZ0B/FGjRrlecz06dNdm1b77dChg9WuXds++ugjW716tftCoS+oBMfRVZrjF1AQnSv1JVBfInVbUGBc0nOfjlvXXXedTZkyxbKysqxTp062atUqdxFHX9luvfVWF4Qj3PReqx1MnjzZtZmDDjrIXQhWgLx06VIXUDz44IPunOa788477dFHH7Xq1au7trZlyxbX4aHvd1deeaVdc801OwQp/fr1c+fH3Xff3dq1a2fLli1zx0j9TT3/0UcfnYRXj2S4/vrr3YUYdY61b9/etQGdG9euXeuOQ2pbVapUCXd7U2CM6FqzZk2sU6dOsZYtW8Yee+yxWE5OTu7vPvvss9ihhx7qfjd16tTc7Vu2bIkde+yxbvu4ceNyt2/cuDHWv39/t33YsGF5/s78+fNjrVu3jnXo0CH2zTff5G5funRprHv37u4xU6ZMKffXi2BYv3597Prrr3fvu37UzgrTu3dvd5/Ro0fnbsvOzo7dfPPNbnu/fv3y3P/333+PtWvXLnbggQfGZs6cmWd7r1693GMefvjhcnplCLrSHL+Agnz99dex4447Lvc4dtttt+1wn9Kc+1544QW3/YwzzoitWrUqd/t7770Xa9OmjfvR4xFu48ePd+3gqKOOin377bd5zn/33HOP+90RRxzhzqei85226fiW2D7U7jp37ux+p+91ifzn0XlUx8DEv92qVavY4YcfHlu7dm2FvF4Eo70dm6/9rFy5Mnbaaae53z3yyCO528Pa3hhjHHGvvfaauxKtKz1KMU1M6VJPSv/+/d3yxIkTc7frKrauVh555JF2xhln5G7XFaYRI0a4K0dKw1D6qk89dLoKrrRZpVn49txzT7v55pvd8n//+99yf71I/hXw//3vfy6lefz48S69uSi6qqirlUoX09VHX+XKle2mm25y7eftt9+277//Pvd3Tz31lK1fv961zSOOOCJ3e506dWzkyJFu+YknnnDtEdFTmuMXkEiZJ3fddZedffbZ9uOPP1rjxo0LvW9pzn0PPfSQu9UxTj3GPvUMKtNh8+bN7jiHcNNxSK699lqXyZJ4/hs8eLDtt99+LmNBafryn//8x90OGTLEtS+f2p3u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ACBJCIwBAEC5+O677+x///uftWjRwjp06GBB1bhxYzv66KPt888/t7feeivZuwMASAICYwAAAkrFt/Tz3nvv5SnopW3XXXedrVu3zu666y7r1q2btWnTxrp06WK33nqr2y5z5861q6++2g477DA3lvnEE0+0xx9/3AobRaW057///e923HHHuedTMHveeefZ//3f/7kCWiWlAmL6W3/84x93+N2HH37oXse5555rW7Zssf/85z9u//R3jzzySLv++utt+fLl7r5Lliyxv/zlL3bUUUe519G9e3e799573ePy02Nuu+0269Gjh7tvu3bt7KSTTnLb9DyF0Thjf58BANFD8S0AAFKQKjyfddZZ9sMPP9i+++7rxiFr+amnnrKvvvrKLrvsMrvmmmusUqVKts8++7jbBQsWuHThFStW2LXXXpvn+V599VX785//7NKeq1at6p5z48aNrmiWfqZMmWIPPPCA1ahRo1j7l5OTY9OmTXPLCtgLs3nzZrvooovs008/dT23TZs2tYULF9qECRPsk08+cfurVGfdb++997b09HQXwCuQ1q1StX2LFi2y3r17u9enCtN63aL/iwJeVZ7W7QEHHLDDfqjqt/5HM2fOtFWrVlmdOnWK/V4AAFIfPcYAAKSgd99919avX+96c5WurCB0xIgR7ncKMq+66irXa6reZgWZb7/9tgukZezYsS4A9qlnWYGygs8BAwa43lw9RsGygkkFpO+//77rTS6ur7/+2gWYNWvWtNatWxd6PwXx8+bNcxWrp0+f7gLwRx991I35VeCroPnggw+2N9980yZPnuxu9dpE903sBVYvsoJivW79fyZNmuR+9Bj1HKsn/Z///GeB+6FAWCnfCug/+OCDYr9OAEA4EBgDAJCibrzxRhc0+s4880zbfffd3bIqXt95550uMBX1tA4cONAtKyhW73FilWylJV9wwQU2ePBg12PsU+/qfffdZ5UrV3ZB5vfff1+sfVNwLfvtt99O76se4cRe5cMPP9xVsRYVHtPfb9CggVtXwHzFFVfkTvv0zTff5AnwRanbiT3bu+22m5uWSeOIFfwWxp8mi8AYAKKHwBgAgBSkAPGYY47ZYZsCYtE4XQWzifygWfxxyAqI1ZssBY0FFo0FVq+vxgur97U4/J5cpUbvTNeuXXfY5r8OTZ9Uq1atPL/T/M9169bN8zqkWbNm7vbuu++2119/PU+vuMYuaz7loUOHFroffuq1eqoBANHCGGMAAFKQgkW/NziR35Nar169Qn8nfgEujb/1i1jdcsstLugsyE8//eRuE3uai6KUZqldu/ZO79uoUaMSvY7E3ycWEtOYavVUa4yyesf1WpRCrYsE6pEuKqVb/AB85cqVO91nAEC4EBgDAJCCdja3sQpJFcfatWtzl7/88ssS3b8oa9ascbeJadmleS3FfR2y//7728SJE+2hhx6y1157zY1xVqCsHxXpUqr0sGHDCp06SgW7ZPXq1cX+mwCAcCAwBgAgwvxgUFQFurhVp3cmMzMzT4BcUZo0aeKmZho+fLgL9GfNmuUKhyk4VpGvfv36uWJlBfVS+wFxcYJ5AEC4MMYYAIAIUyDpj0UuqrDW559/bt9++62rhF0cKngl6rWtCEqp1rhmf85n9TSrMJkCYVW5VuEwpZ5rCipV2y5sCiypX79+hewzACA4CIwBAIgwBYudOnXKncapICpGdd5557niXFOnTi3W8/qFrH7++WerCArANU3TxRdfbF988UWB+6O5nkVTMhXE31fN4QwAiBYCYwAAIm7QoEGu11jzBI8cOTJPr7DSjy+//HLbunWrqxR96qmnFus5VU3an89Y8yOXN1Wp1nRM/jRW8+fPz/2dAuGnn37avRb1JPv3y0/zP8uhhx5a7vsLAAgWxhgDABBxCgRvvfVWV5jq8ccft+eee86aN2/uAuQff/zRpSkrNVopyYVVrc5Pacx16tRxPblKw+7YsWO5vw6NKz7nnHNcAHzKKadY48aNXaVpVdT206SHDBlS4FzG6i1eunSpm+9ZVawBANFCjzEAALCzzjrLJkyY4ALLBg0a2HfffWfLli1zAbLG6aras58eXRwKME8++WS37M+TXN40T/OLL75ol156qQt+f/31VxckqxCY9uXZZ591vd8F8ffxqKOOYowxAERQWixxAkAAAIAysmjRIjvhhBPcXMQzZsxwwXJQ9ezZ041NfuqppyqkdxsAECz0GAMAgHLRtGlTV7BLPbcKjINq7ty5LihWETKCYgCIJgJjAABQbq688ko3Llnjk4NqzJgxlpaWZtdcc02ydwUAkCQExgAAoFx7jQcPHmyffPKJTZs2zYJGPcWqxn3++ZNMAVoAAACUSURBVOdbhw4dkr07AIAkYYwxAAAoV5ou6aKLLrJffvnFpkyZYhkZGRYUF154oduv8ePHW7Vq1ZK9OwCAJCEwBgAAAABEGqnUAAAAAIBIIzAGAAAAAEQagTEAAAAAINIIjAEAAAAAkUZgDAAAAACINAJjAAAAAECkERgDAAAAACKNwBgAAAAAEGkExgAAAAAAi7L/B8sn3vxqZqUhAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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8Ua78MIL7fTTT7fzzjvPunXrZvPnz3e/nzdvXgZLq7Zt27qfuT9QzeKdd97p7vviiy/szTfftFatWlnlypWtVq1a9r///c9+//1397i3337brrzySve7888/3/1u7dq1lsroSCWEEBEgb968ri5qz5492YpATjYNGjSI2b6JFGHHjn9vwVKkCI7xGe/btInW4OAn8WQe1UizUijd7cwhjrA91IwZM+y2225zZvhVqlSxM844w9asWeM+V4i/oUOHOtHXpEkT+/DDD53zAPZWRxxxRFCz2J955hl77733rGLFiu55CxcudK+J8Lzsssvc9vkdAvXzzz93v1u8eLHNmjUrZUc2pqxY/PHHH23UqFHuKoOr+Pz587v6oNatW9sll1wS790TQqRwdLFq1apZPo6oxaBBg2K2XyJF4D3Tt2/wj9+wwaxo0Yz3lS79r2AMhnbtzMaNy3jfiy+atW8f/D4sXmxWubJFkscff9xdmHGOR7B5TJo0ye6//3574oknnHB75JFHrGnTpk4s3nTTTVazZs2gto9QpKaxWbNm7ue1a9dao0aNbOnSpU4oDhkyxC699FL3u7/++ssJSMTqnDlzUvYiMCXFIgt9yy232O7du+3EE0+0OnXqOMHIFQDikSL0Bx54IN67KYRIUXPurMTiP//8Y+vWrbNjjz02pvsmRKrA5wdKlSqV4f4rrrjCduzY4T5bwc489keNGjX2C0U45phjrHr16i5KWbt27f1C0XNB4HP/+uuv24oVKyxVSbmaxS1btthdd93lhCJfuYIfPny4u+KYOHGiFS5c2H0/e/bseO+qECLFoLYpu0kuixYtyjbyKIQIjBchJFNIBJDP3K5du+yQQw6xdu3aueheToUiUIuYmeLFi7uvpJ8z45nr79y501KVlIssUrOwceNG92a6jskBPlSqVMmFogcPHmzTpk2zhg0bxm0/hRCpB/VQ2Xktkh67+OKLY7ZPIoW4806zHj1Cq1nMzMqVodUsZqZNGzOfqFtQNYsRpl+/fi57SCPKmDFj3K1AgQLuYo2oH6VmCMecUsTP/y3Xf+KzWLFiAX+XyqScWCSiiPIn9eyPsmXLuq9eV5MQIgngYOx7AE/ggzMpK6ZGBEozUwZD1iOlSaL1Siry5//3Fg7+BGQoICD9icgYUqJECZchpKnk/fffd5HFJUuWuO+5vfzyyzZ6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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "fig_r, ax_r = plt.subplots(figsize=(10, 6))\n", + "plot_ch(ax_r, right_corr, f'Right Eye . {PICK_CH} (n={len(ch_epochs[\"right_eye\"])})', 'red')\n", + "ax_r.plot(times, right_data, color='red', linestyle=':', alpha=0.6, linewidth=1.6, label='raw (uncorrected)')\n", + "ax_r.legend(fontsize=8, loc='upper right')\n", + "fig_r.tight_layout()\n", + "plot_vep(evoked_right_corr)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "eeg-experiments", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.20" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/examples/visual_vep/02r__pattern_reversal_longitudinal.py b/examples/visual_vep/02r__pattern_reversal_longitudinal.py deleted file mode 100644 index 92d2cd7af..000000000 --- a/examples/visual_vep/02r__pattern_reversal_longitudinal.py +++ /dev/null @@ -1,199 +0,0 @@ -""" -Longitudinal P100 Tracking -=========================== - -This example demonstrates how to load multiple PR-VEP recording sessions -for the same subject and track P100 latency over time. This is useful for -monitoring changes in visual pathway conduction — for instance during nerve -recovery, remyelination, or neuroplasticity studies — where latency shifts -of a few milliseconds between sessions are meaningful. - -The workflow is: - -1. Discover all sessions for a given subject. -2. For each session, epoch around stimulus onsets, extract the per-eye P100 - latency using parabolic interpolation (sub-sample precision), and store - the results. -3. Plot per-eye P100 latency and interocular difference over sessions. - -Before attributing a latency change to an intervention, record several -baseline sessions (at least 3–5, ideally over 1–2 weeks) to establish your -individual test-retest range. - -""" - -################################################################################################### -# Setup -# ----- - -import os -import glob -import numpy as np -import warnings -warnings.filterwarnings('ignore') -import matplotlib.pyplot as plt -import matplotlib.dates as mdates -from datetime import datetime - -from mne import Epochs, find_events - -from eegnb.analysis.utils import load_csv_as_raw -from eegnb.analysis.vep_utils import get_peak -from eegnb.devices.utils import EEG_INDICES, SAMPLE_FREQS - -################################################################################################### -# Configuration -# ------------- -# -# Point ``data_root`` at the directory tree that contains your recordings. -# The expected layout follows the eeg-expy convention:: -# -# data_root/subject{XXXX}/session{XXX}/recording_*.csv -# -# Adjust ``device_name``, ``subject_id``, and ``hardware_lag`` for your setup. -# - -data_root = os.path.join(os.path.expanduser('~/'), 'eeg-data', 'visual-PRVEP') -device_name = 'cyton' -subject_id = 1 -hardware_lag = 0.0 # seconds — set to your measured display-pipeline offset - -################################################################################################### -# Discover sessions -# ----------------- -# -# Scan the subject directory for session folders and sort them by the -# recording timestamp embedded in the CSV filename. -# - -subject_dir = os.path.join(data_root, f'subject{subject_id:04d}') -session_dirs = sorted(glob.glob(os.path.join(subject_dir, 'session*'))) - -print(f'Found {len(session_dirs)} sessions for subject {subject_id}') - -################################################################################################### -# Extract P100 per session -# ------------------------ -# -# For each session we: -# -# - Load the CSV into an MNE Raw object -# - Band-pass filter 1–30 Hz (FIR) -# - Epoch around stimulus markers, separating left and right eye -# - Subtract the hardware lag so t=0 is true photon delivery -# - Extract N75, P100, and N145 latencies with parabolic interpolation -# - -sfreq = SAMPLE_FREQS[device_name] -ch_ind = EEG_INDICES[device_name] - -results = [] - -for session_dir in session_dirs: - csv_files = sorted(glob.glob(os.path.join(session_dir, 'recording_*.csv'))) - if not csv_files: - continue - - # Parse recording date from filename - fname = os.path.basename(csv_files[0]) - date_str = fname.replace('recording_', '').replace('.csv', '') - try: - session_date = datetime.strptime(date_str, '%Y-%m-%d-%H.%M.%S') - except ValueError: - session_date = None - - session_label = os.path.basename(session_dir) - - raw = load_csv_as_raw(csv_files, sfreq=sfreq, ch_ind=ch_ind, - replace_ch_names=None, verbose=0) - raw.filter(1, 30, method='fir', verbose=False) - - events = find_events(raw, verbose=False) - event_id = {'left_eye': 1, 'right_eye': 2} - - epochs = Epochs(raw, events=events, event_id=event_id, - tmin=-0.1, tmax=0.4, baseline=None, - reject={'eeg': 65e-6}, preload=True, - verbose=False) - - if hardware_lag: - epochs.shift_time(-hardware_lag) - - drop_pct = (1 - len(epochs.events) / len(events)) * 100 - - session_result = { - 'session': session_label, - 'date': session_date, - 'n_epochs_left': len(epochs['left_eye']), - 'n_epochs_right': len(epochs['right_eye']), - 'drop_pct': drop_pct, - } - - for eye in ['left_eye', 'right_eye']: - if len(epochs[eye]) < 10: - session_result[f'{eye}_p100'] = np.nan - continue - - evoked = epochs[eye].average(picks=['Oz']) - - n75_latency = get_peak('N75', evoked, 0.06, 0.125, 'neg') - p100_latency = get_peak('P100', evoked, n75_latency, n75_latency + 0.1, 'pos') - - session_result[f'{eye}_p100'] = p100_latency * 1e3 # convert to ms - - results.append(session_result) - -print(f'\nExtracted P100 from {len(results)} sessions') - -################################################################################################### -# Summary table -# ------------- - -print(f'\n{"Session":<14} {"Date":<12} {"L-eye P100":>11} {"R-eye P100":>11} ' - f'{"IOD":>8} {"Drop%":>6} {"L-epochs":>9} {"R-epochs":>9}') -print('-' * 82) -for r in results: - date_str = r['date'].strftime('%Y-%m-%d') if r['date'] else '—' - left = r['left_eye_p100'] - right = r['right_eye_p100'] - iod = left - right if not (np.isnan(left) or np.isnan(right)) else np.nan - print(f'{r["session"]:<14} {date_str:<12} {left:>9.2f}ms {right:>9.2f}ms ' - f'{iod:>6.2f}ms {r["drop_pct"]:>5.1f}% {r["n_epochs_left"]:>9} {r["n_epochs_right"]:>9}') - -################################################################################################### -# Plot P100 latency over sessions -# -------------------------------- - -dates = [r['date'] for r in results] -left_p100 = [r['left_eye_p100'] for r in results] -right_p100 = [r['right_eye_p100'] for r in results] -iod = [l - r if not (np.isnan(l) or np.isnan(r)) else np.nan - for l, r in zip(left_p100, right_p100)] - -use_dates = all(d is not None for d in dates) -x = dates if use_dates else range(len(results)) - -fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8), sharex=True) - -# Per-eye P100 latency -ax1.plot(x, left_p100, 'o-', label='Left eye', color='blue', linewidth=2) -ax1.plot(x, right_p100, 's-', label='Right eye', color='red', linewidth=2) -ax1.set_ylabel('P100 latency (ms)') -ax1.set_title('P100 Latency Across Sessions') -ax1.legend() -ax1.grid(True, alpha=0.3) - -# Interocular difference -ax2.plot(x, iod, 'D-', color='green', linewidth=2) -ax2.axhline(y=0, color='black', linestyle='--', alpha=0.3) -ax2.set_ylabel('Interocular difference (ms)') -ax2.set_xlabel('Session date' if use_dates else 'Session index') -ax2.set_title('Interocular P100 Latency Difference (Left − Right)') -ax2.grid(True, alpha=0.3) - -if use_dates: - ax2.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) - fig.autofmt_xdate() - -plt.tight_layout() -plt.show() From dbfbbd2d72f8a28a3b6cf278f019d488288bd2e4 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Wed, 22 Apr 2026 18:23:00 +1000 Subject: [PATCH 39/94] correctly calculate VR stereoscopic axis instead of constant. --- eegnb/experiments/Experiment.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index 7e24b2af9..8f234fca4 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -64,10 +64,12 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, if use_vr: # VR interface accessible by specific experiment classes for customizing and using controllers. self.rift: Rift = visual.Rift(monoscopic=not stereoscopic, headLocked=True) - # eye for presentation - if stereoscopic: - self.left_eye_x_pos = 0.2 - self.right_eye_x_pos = -0.2 + + # Shift content onto each lens's optical axis. VR HMDs use canted + # asymmetric frustums, so NDC (0,0) is off-axis and binocular content + # there forces inward vergence ("cross-eyed" feel). + if use_vr and stereoscopic: + self.left_eye_x_pos, self.right_eye_x_pos = self._compute_optical_axis_offsets() else: self.left_eye_x_pos = 0 self.right_eye_x_pos = 0 @@ -82,6 +84,18 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, self.parameter = np.random.binomial(1, 0.5, self.n_trials) self.trials = DataFrame(dict(parameter=self.parameter, timestamp=np.zeros(self.n_trials))) + def _compute_optical_axis_offsets(self): + """NDC x offsets placing content on each lens's optical axis: + ndc_x = (LeftTan - RightTan) / (LeftTan + RightTan).""" + import psychxr.drivers.libovr as libovr + # fov = [UpTan, DownTan, LeftTan, RightTan] + left_fov, _, _ = libovr.getEyeRenderFov(libovr.EYE_LEFT) + right_fov, _, _ = libovr.getEyeRenderFov(libovr.EYE_RIGHT) + left_L, left_R = float(left_fov[2]), float(left_fov[3]) + right_L, right_R = float(right_fov[2]), float(right_fov[3]) + return ((left_L - left_R) / (left_L + left_R), + (right_L - right_R) / (right_L + right_R)) + @abstractmethod def load_stimulus(self): """ From 8a0cc7389b5c4a30081829cfddebf4e63356989c Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Wed, 22 Apr 2026 20:44:29 +1000 Subject: [PATCH 40/94] cleaned up vr code --- eegnb/devices/meta_quest.py | 118 +++++++++++++++++++++++++++ eegnb/experiments/BlockExperiment.py | 11 +-- eegnb/experiments/Experiment.py | 46 +++++------ 3 files changed, 147 insertions(+), 28 deletions(-) create mode 100644 eegnb/devices/meta_quest.py diff --git a/eegnb/devices/meta_quest.py b/eegnb/devices/meta_quest.py new file mode 100644 index 000000000..f29bebda4 --- /dev/null +++ b/eegnb/devices/meta_quest.py @@ -0,0 +1,118 @@ +import logging +from time import time +from psychopy.visual.rift import Rift + +class MetaQuest(Rift): + """ + Extended Rift class for Meta Quest HMDs, providing built-in methods for + stereoscopic rendering math, precise hardware clock synchronization, + and per-trial compositor telemetry buffering. + """ + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.libovr_to_wallclock_offset = None + + def compute_optical_axis_offsets(self): + """ + NDC x offsets placing content on each lens's optical axis: + ndc_x = (LeftTan - RightTan) / (LeftTan + RightTan). + """ + try: + import psychxr.drivers.libovr as libovr + # fov = [UpTan, DownTan, LeftTan, RightTan] + left_fov, _, _ = libovr.getEyeRenderFov(libovr.EYE_LEFT) + right_fov, _, _ = libovr.getEyeRenderFov(libovr.EYE_RIGHT) + left_L, left_R = float(left_fov[2]), float(left_fov[3]) + right_L, right_R = float(right_fov[2]), float(right_fov[3]) + return ((left_L - left_R) / (left_L + left_R), + (right_L - right_R) / (right_L + right_R)) + except Exception as e: + logging.warning(f"[MetaQuest] Failed to compute optical axis offsets: {e}") + return (0.0, 0.0) + + def sync_vr_clock(self): + """ + Calculates Wall-clock <-> LibOVR clock offset. LibOVR timestamps are on a QPC-based + clock with arbitrary zero; time.time() is Unix epoch. Sample paired calls in a + tight bracket and keep the tightest, so analysis can convert LibOVR times to wall-clock. + """ + if self.libovr_to_wallclock_offset is not None: + return self.libovr_to_wallclock_offset + + try: + from psychxr.libovr import getTimeInSeconds + best_bracket = None + best_offset = None + for _ in range(21): + t0 = time() + lovr = getTimeInSeconds() + t1 = time() + bracket = t1 - t0 + offset = 0.5 * (t0 + t1) - lovr + if best_bracket is None or bracket < best_bracket: + best_bracket = bracket + best_offset = offset + + logging.info( + f"[MetaQuest] clock offset (wall - libovr) = " + f"{best_offset:.6f}s (tightest bracket = {best_bracket*1e3:.3f}ms)" + ) + + self.libovr_to_wallclock_offset = best_offset + return best_offset + except Exception as e: + logging.warning(f"[MetaQuest] LibOVR clock sync failed: {e}") + return None + + def log_telemetry(self, trial_idx, software_time): + """Extracts native LibOVR performance stats and buffers them in memory.""" + submitted_frame_index = None + app_frame_index = None + app_m2p_s = None + comp_latency_s = None + time_to_vsync_s = None + + try: + submitted_frame_index = self._frameIndex - 1 + perf = getattr(self, '_perfStats', None) + if perf is not None and perf.frameStatsCount > 0: + stat = perf.frameStats[0] + app_frame_index = stat.appFrameIndex + app_m2p_s = stat.appMotionToPhotonLatency + comp_latency_s = stat.compositorLatency + time_to_vsync_s = stat.timeToVsync + except Exception: + pass + + if not hasattr(self, 'timing_data'): + self.timing_data = [] + + self.timing_data.append([ + trial_idx, software_time, + submitted_frame_index, app_frame_index, + app_m2p_s, comp_latency_s, time_to_vsync_s + ]) + + def save_telemetry(self, save_fn): + """Saves memory-buffered VR timing telemetry to a CSV sidecar.""" + timing_data = getattr(self, 'timing_data', []) + if not timing_data: + return + + import csv + timing_path = save_fn.with_name(save_fn.stem + '_timing.csv') if save_fn else 'vr_timing.csv' + with open(timing_path, 'w', newline='') as f: + writer = csv.writer(f) + writer.writerow([ + 'trial_idx', 'software_time', + 'submitted_frame_index', 'app_frame_index', + 'app_motion_to_photon_latency_s', 'compositor_latency_s', + 'time_to_vsync_s' + ]) + + # Log the clock offset if calculated + if self.libovr_to_wallclock_offset is not None: + writer.writerow(['# libovr_to_wallclock_offset_s', self.libovr_to_wallclock_offset, 'bracket_ms', 0]) + + writer.writerows(timing_data) + print(f" Saved VR timing telemetry to {timing_path}") diff --git a/eegnb/experiments/BlockExperiment.py b/eegnb/experiments/BlockExperiment.py index 8161e1dcb..4cb02e8a0 100644 --- a/eegnb/experiments/BlockExperiment.py +++ b/eegnb/experiments/BlockExperiment.py @@ -12,6 +12,7 @@ from time import time from .Experiment import BaseExperiment +from psychopy import core class BlockExperiment(BaseExperiment, ABC): @@ -126,14 +127,11 @@ def run(self, instructions=True): if not self._show_block_instructions(block_index): break - # Elevate process priority and disable GC during the trial loop - # to prevent OS scheduling jitter and ~1-10ms GC pauses that - # cause the Quest Link compositor to drop frames (hourglass). - # Both are restored between blocks so instruction screens run normally. - from psychopy import core core.rush(True) gc.disable() try: + if self.use_vr: + self.rift.sync_vr_clock() if not self._run_trial_loop(start_time=time(), duration=self.block_duration): break finally: @@ -146,5 +144,8 @@ def run(self, instructions=True): if self.eeg: self.eeg.stop() + if self.use_vr: + self.rift.save_telemetry(self.save_fn) + # Close window at the end of all blocks self.window.close() diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index 8f234fca4..eff7fad9e 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -11,8 +11,8 @@ from abc import abstractmethod, ABC from typing import Callable from eegnb.devices.eeg import EEG +from eegnb.devices.meta_quest import MetaQuest as Rift from psychopy import prefs -from psychopy.visual.rift import Rift import gc from time import time @@ -63,13 +63,14 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, self.stereoscopic = stereoscopic if use_vr: # VR interface accessible by specific experiment classes for customizing and using controllers. - self.rift: Rift = visual.Rift(monoscopic=not stereoscopic, headLocked=True) + # OculusRift extends psychopy's Rift with clock sync, per-trial telemetry buffering, and telemetry CSV saving. + self.rift: Rift = Rift(monoscopic=not stereoscopic, headLocked=True) # Shift content onto each lens's optical axis. VR HMDs use canted # asymmetric frustums, so NDC (0,0) is off-axis and binocular content # there forces inward vergence ("cross-eyed" feel). if use_vr and stereoscopic: - self.left_eye_x_pos, self.right_eye_x_pos = self._compute_optical_axis_offsets() + self.left_eye_x_pos, self.right_eye_x_pos = self.rift.compute_optical_axis_offsets() else: self.left_eye_x_pos = 0 self.right_eye_x_pos = 0 @@ -84,17 +85,6 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, self.parameter = np.random.binomial(1, 0.5, self.n_trials) self.trials = DataFrame(dict(parameter=self.parameter, timestamp=np.zeros(self.n_trials))) - def _compute_optical_axis_offsets(self): - """NDC x offsets placing content on each lens's optical axis: - ndc_x = (LeftTan - RightTan) / (LeftTan + RightTan).""" - import psychxr.drivers.libovr as libovr - # fov = [UpTan, DownTan, LeftTan, RightTan] - left_fov, _, _ = libovr.getEyeRenderFov(libovr.EYE_LEFT) - right_fov, _, _ = libovr.getEyeRenderFov(libovr.EYE_RIGHT) - left_L, left_R = float(left_fov[2]), float(left_fov[3]) - right_L, right_R = float(right_fov[2]), float(right_fov[3]) - return ((left_L - left_R) / (left_L + left_R), - (right_L - right_R) / (right_L + right_R)) @abstractmethod def load_stimulus(self): @@ -281,11 +271,7 @@ def _draw(self, present_stimulus: Callable): tracking_state = self.window.getTrackingState() self.window.calcEyePoses(tracking_state.headPose.thePose) self.window.setDefaultView() - # Per-frame predicted photon time from the OpenXR compositor. - # More accurate than time() + fixed lag constant — varies per frame - # based on compositor load. Stored so present_stimulus() can use it - # as the EEG marker timestamp. - self.predicted_display_time = tracking_state.headPose.timeInSeconds + present_stimulus() def _clear_user_input(self): @@ -416,12 +402,11 @@ def run(self, instructions=True): # Record experiment until a key is pressed or duration has expired. record_start_time = time() - # Elevate process priority and disable GC during the trial loop to - # prevent OS scheduling jitter and ~1-10ms GC pauses that cause - # dropped frames (visible as Quest Link hourglass). core.rush(True) gc.disable() try: + if self.use_vr: + self.rift.sync_vr_clock() self._run_trial_loop(record_start_time, self.duration) finally: gc.enable() @@ -436,18 +421,33 @@ def run(self, instructions=True): if self.eeg: self.eeg.stop() + if self.use_vr: + self.rift.save_telemetry(self.save_fn) + # Closing the window self.window.close() + def push_vr_marker(self, marker, trial_idx): + """ + Pushes the marker to EEG and delegates high-resolution LibOVR + compositor stats to the VR hardware object. + """ + software_time = time() + + if not self.eeg.push_sample(marker=marker): + return + + if self.use_vr: + self.rift.log_telemetry(trial_idx, software_time) + def send_triggers(self, marker): """Send timing triggers to recording device[s]""" for dev in self.devices: timestamp = time() dev.push_sample(marker=marker, timestamp=timestamp) - @property def name(self) -> str: """ This experiment's name """ From ef0815a8d34e3d48ad3a7406cad9e3fd17b558b0 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Wed, 22 Apr 2026 20:55:47 +1000 Subject: [PATCH 41/94] moved more vr stuff out and made the stimulus more inline with iscev standard. --- eegnb/devices/meta_quest.py | 30 ++++ .../visual_vep/pattern_reversal_vep.py | 145 +++++++----------- 2 files changed, 89 insertions(+), 86 deletions(-) diff --git a/eegnb/devices/meta_quest.py b/eegnb/devices/meta_quest.py index f29bebda4..a371629f0 100644 --- a/eegnb/devices/meta_quest.py +++ b/eegnb/devices/meta_quest.py @@ -1,4 +1,5 @@ import logging +import numpy as np from time import time from psychopy.visual.rift import Rift @@ -64,6 +65,35 @@ def sync_vr_clock(self): logging.warning(f"[MetaQuest] LibOVR clock sync failed: {e}") return None + def log_display_info(self): + """ + Reads IPD, PPD, and display resolution from the LibOVR session and logs + them to the telemetry sidecar as header comment rows. + Returns (ppd, ipd_mm) for use in stimulus sizing. + """ + try: + ppta = self.pixelsPerTanAngleAtCenter + ppd_h = np.mean([p[0] for p in ppta]) * (np.pi / 180.0) + ppd_v = np.mean([p[1] for p in ppta]) * (np.pi / 180.0) + ppd = int(round(min(ppd_h, ppd_v))) + + eye_to_nose = self.eyeToNoseDistance + ipd_mm = (eye_to_nose[0] + eye_to_nose[1]) * 1000.0 + + logging.info( + f"[MetaQuest] IPD={ipd_mm:.1f}mm ppd={ppd} (h={ppd_h:.1f} v={ppd_v:.1f}) " + f"res={self.displayResolution} eye_buf={self.size}" + ) + + if not hasattr(self, 'timing_data'): + self.timing_data = [] + self.timing_data.insert(0, ['# ipd_mm', ipd_mm, 'ppd', ppd, f'ppd_h={ppd_h:.1f} ppd_v={ppd_v:.1f}']) + + return ppd, ipd_mm + except Exception as e: + logging.warning(f"[MetaQuest] Failed to read display info: {e}") + return None, None + def log_telemetry(self, trial_idx, software_time): """Extracts native LibOVR performance stats and buffers them in memory.""" submitted_frame_index = None diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index 15994fcac..b0c98fa6f 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -1,5 +1,6 @@ from time import time import csv +import logging import numpy as np from psychopy import visual @@ -8,7 +9,12 @@ from eegnb.experiments.BlockExperiment import BlockExperiment from stimupy.stimuli.checkerboards import contrast_contrast -QUEST_PPD = 20 +# ISCEV PR-VEP standard +ISCEV_CHECK_DEG = 1.0 +ISCEV_FIELD_DEG = 16.0 +ISCEV_MEAN_LUM = 0.0 + +QUEST2_PPD_NOMINAL = 20 class VisualPatternReversalVEP(BlockExperiment): @@ -22,18 +28,6 @@ def __init__(self, display_refresh_rate: int, eeg: Optional[EEG] = None, save_fn super().__init__("Visual Pattern Reversal VEP", block_duration_seconds, eeg, save_fn, block_trial_size, n_blocks, iti, soa, jitter, use_vr, use_fullscr, stereoscopic=True) - # Per-trial timing sidecar: records software time, compositor predicted - # display time, and delta for each trial. Written alongside the EEG CSV. - if save_fn: - timing_path = save_fn.with_name(save_fn.stem + '_timing.csv') - else: - timing_path = 'vep_timing.csv' - self._timing_file = open(timing_path, 'w', newline='') - self._timing_writer = csv.writer(self._timing_file) - self._timing_writer.writerow( - ['trial_idx', 'software_time', 'predicted_display_time', 'delta_ms', 'use_vr'] - ) - self.instruction_text = f"""Welcome to the Visual Pattern Reversal VEP experiment! This experiment will run for {n_blocks} blocks of {block_duration_seconds} seconds each. @@ -52,32 +46,17 @@ def __init__(self, display_refresh_rate: int, eeg: Optional[EEG] = None, save_fn self.parameter = np.array(block_eyes) @staticmethod - def create_monitor_checkerboard(intensity_checks): - # Standard parameters for monitor-based pattern reversal VEP - # Using standard 1 degree check size at 30 pixels per degree - return contrast_contrast( - visual_size=(16, 16), # aspect ratio in degrees - ppd=72, # pixels per degree - frequency=(0.5, 0.5), # spatial frequency of the checkerboard (0.5 cpd = 1 degree check size) - intensity_checks=intensity_checks, - target_shape=(0, 0), - alpha=0, - tau=0 - ) - - @staticmethod - def create_vr_checkerboard(intensity_checks): - # Optimized parameters for Oculus/Meta Quest 2 with PC link - # Quest 2 has approximately 20 pixels per degree and a ~90° FOV - # Using standard 1 degree check size (0.5 cpd) + def create_checkerboard(intensity_checks, field_deg=ISCEV_FIELD_DEG, + check_deg=ISCEV_CHECK_DEG, ppd=72): + cpd = 1.0 / (2.0 * check_deg) return contrast_contrast( - visual_size=(20, 20), # size in degrees - covers a good portion of the FOV - ppd=QUEST_PPD, # pixels per degree for Quest 2 - frequency=(0.5, 0.5), # spatial frequency (0.5 cpd = 1 degree check size) + visual_size=(field_deg, field_deg), + ppd=ppd, + frequency=(cpd, cpd), intensity_checks=intensity_checks, target_shape=(0, 0), alpha=0, - tau=0 + tau=0, ) def load_stimulus(self) -> Dict[str, Any]: @@ -90,21 +69,18 @@ def load_stimulus(self) -> Dict[str, Any]: assert abs(self.display_refresh_rate - actual_frame_rate) <= self.display_refresh_rate * 0.05, f"Expected frame rate {self.display_refresh_rate} Hz, but got {actual_frame_rate} Hz" if self.use_vr: - # Create the VR checkerboard - create_checkerboard = self.create_vr_checkerboard - # the window is large over the eye, checkerboard should only cover the central vision - size = self.window.size / 1.5 + ppd, ipd_mm = self.rift.log_display_info() + logging.info(f"[PRVEP-HMD] optical_axis_ndc=L{self.left_eye_x_pos:+.3f}/R{self.right_eye_x_pos:+.3f}") + + # 1 texel = 1 buffer pixel + tex_px = int(round(ISCEV_FIELD_DEG * ppd)) + stim_size_px = (tex_px, tex_px) else: - # Create the Monitor checkerboard - create_checkerboard = self.create_monitor_checkerboard - size = (self.window_size[1], self.window_size[1]) - - # Optode sync patch: small white/black square in the bottom-left corner. - # Alternates polarity with each checkerboard reversal so a photodiode - # taped to this corner produces a TTL pulse on every stimulus onset. - # Monitor path only — VR uses compositor timestamps instead. + ppd = 72 + stim_size_px = (self.window_size[1], self.window_size[1]) + if not self.use_vr: - patch_size = 50 # pixels + patch_size = 50 x = -self.window.size[0] / 2 + patch_size / 2 y = -self.window.size[1] / 2 + patch_size / 2 self.optode_patch = visual.Rect( @@ -114,42 +90,54 @@ def load_stimulus(self) -> Dict[str, Any]: else: self.optode_patch = None - # The surrounding / periphery needs to be dark when not using vr. - # Also used for covering eye which is not being stimulated. self.black_background = visual.Rect(self.window, width=self.window.size[0], height=self.window.size[1], fillColor='black') - # A grey background behind the checkerboard must be used in vr to maintain luminence. + # Match checkerboard mean luminance to avoid adaptation shift. self.grey_background = visual.Rect(self.window, width=self.window.size[0], height=self.window.size[1], - fillColor=[-0.22, -0.22, -0.22]) + fillColor=[ISCEV_MEAN_LUM] * 3) - # Create checkerboard stimuli def create_checkerboard_stim(intensity_checks, pos): - return visual.ImageStim(self.window, - image=create_checkerboard(intensity_checks)['img'], - units='pix', size=size, color='white', pos=pos) + return visual.ImageStim( + self.window, + image=self.create_checkerboard( + intensity_checks, + field_deg=ISCEV_FIELD_DEG, + check_deg=ISCEV_CHECK_DEG, + ppd=ppd, + )['img'], + units='pix', size=stim_size_px, color='white', pos=pos, + ) # Create fixation stimuli def create_fixation_stim(pos): - fixation = visual.GratingStim( - win=self.window, - pos=pos, - sf=400 if self.use_vr else 0.2, - color=[1, 0, 0] + size = 0.02 if self.use_vr else 0.4 + return visual.Rect( + win=self.window, + pos=pos, + width=size, + height=size, + units='norm' if self.use_vr else None, + fillColor=[1, -1, -1], + lineColor=[1, -1, -1], ) - fixation.size = 0.02 if self.use_vr else 0.4 - return fixation - # Create VR block instruction stimuli def create_vr_block_instruction(pos): - return visual.TextStim(win=self.window, text="Focus on the red dot, and try not to blink whilst the squares are flashing, press the spacebar or pull the controller trigger when ready to commence.", color=[-1, -1, -1], - pos=pos, height=0.1) + return visual.TextStim( + win=self.window, + text="Focus on the red dot, and try not to blink whilst the " + "squares are flashing, press the spacebar or pull the " + "controller trigger when ready to commence.", + color=[-1, -1, -1], + pos=pos, height=0.1, + ) - # Create and position stimulus + # All stimuli placed on each lens's optical axis for symmetric FOV + # and maximum lens resolution. def create_eye_stimuli(eye_x_pos, pix_x_pos): return { 'checkerboards': [ @@ -160,13 +148,11 @@ def create_eye_stimuli(eye_x_pos, pix_x_pos): 'vr_block_instructions': create_vr_block_instruction((eye_x_pos, 0)) } - # Structure all stimuli in organized dictionary if self.use_vr: - # Calculate pixel positions for stereoscopic presentation + # pix_x = ndc_x * (per-eye buffer width / 2) window_width = self.window.size[0] left_pix_x_pos = self.left_eye_x_pos * (window_width / 2) right_pix_x_pos = self.right_eye_x_pos * (window_width / 2) - return { 'left': create_eye_stimuli(self.left_eye_x_pos, left_pix_x_pos), 'right': create_eye_stimuli(self.right_eye_x_pos, right_pix_x_pos) @@ -178,6 +164,7 @@ def create_eye_stimuli(eye_x_pos, pix_x_pos): def _present_vr_block_instructions(self, open_eye, closed_eye): self.window.setBuffer(open_eye) + self.grey_background.draw() self.stim[open_eye]['vr_block_instructions'].draw() self.stim[open_eye]['fixation'].draw() self.window.setBuffer(closed_eye) @@ -244,29 +231,15 @@ def _draw_frame(self, idx: int): def _push_marker(self, idx: int): trial_idx = self.current_block_index * self.block_trial_size + idx label = self.parameter[trial_idx] - - software_time = time() - predicted_display_time = getattr(self, 'predicted_display_time', None) - marker = self.markernames[label] - if not self.eeg.push_sample(marker=marker): - return - - # Record predicted_display_time in the timing sidecar — analysis - # uses per-trial variation around the mean for compositor-jitter correction. - delta_ms = (predicted_display_time - software_time) * 1000 if predicted_display_time else None - self._timing_writer.writerow( - [trial_idx, software_time, predicted_display_time, delta_ms, self.use_vr] - ) + + self.push_vr_marker(marker, trial_idx) def present_soa(self, idx: int): # Redraw the current checkerboard each frame during the SOA wait so the # VR compositor stays fed (~120 Hz). No marker push / timing row. self._draw_frame(idx) - def __del__(self): - if hasattr(self, '_timing_file') and not self._timing_file.closed: - self._timing_file.close() def present_iti(self): if self.use_vr: From 9d3f4d3cc6fdc4cc898e8217d6d4b0e87cdc6c7e Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Wed, 22 Apr 2026 22:01:25 +1000 Subject: [PATCH 42/94] added updated visualization --- eegnb/analysis/vep_utils.py | 30 +- .../00x__pattern_reversal_run_experiment.py | 4 +- .../visual_vep/01r__pattern_reversal_viz.py | 347 ++++-- ...r__pattern_reversal_viz_montage_type.ipynb | 1036 ----------------- 4 files changed, 239 insertions(+), 1178 deletions(-) delete mode 100644 examples/visual_vep/01r__pattern_reversal_viz_montage_type.ipynb diff --git a/eegnb/analysis/vep_utils.py b/eegnb/analysis/vep_utils.py index 252c2dd24..9cf44ca7c 100644 --- a/eegnb/analysis/vep_utils.py +++ b/eegnb/analysis/vep_utils.py @@ -52,28 +52,20 @@ def get_peak(erp_name, evoked_potential, peak_time_min, peak_time_max, mode): interp_latency = sample_latency interp_uv = data[peak_sample] - print_latency(erp_name, interp_latency, peak_channel, interp_uv) - return interp_latency + return { + 'name': erp_name, + 'latency': interp_latency, + 'channel': peak_channel, + 'amplitude': interp_uv + } -def plot_vep(evoked_occipital: Evoked): - # Fixed absolute windows — independent of each other so a missed N75 - # doesn't cascade into a missed P100 or N145. - get_peak(erp_name='N75', evoked_potential=evoked_occipital, +def get_pr_vep_latencies(evoked_occipital: Evoked): + n75 = get_peak(erp_name='N75', evoked_potential=evoked_occipital, peak_time_min=0.060, peak_time_max=0.090, mode='neg') - p100_latency = get_peak(erp_name='P100', evoked_potential=evoked_occipital, + p100 = get_peak(erp_name='P100', evoked_potential=evoked_occipital, peak_time_min=0.080, peak_time_max=0.130, mode='pos') - get_peak(erp_name='N145', evoked_potential=evoked_occipital, + n145 = get_peak(erp_name='N145', evoked_potential=evoked_occipital, peak_time_min=0.120, peak_time_max=0.170, mode='neg') - fig = evoked_occipital.plot(show=False) - - ax = fig.get_axes()[0] - ax.axvline(x=0, color='r', linestyle='--', label='stim') - ax.axvline(x=0.100, color='r', linestyle='--', label='100 ms') - if p100_latency is not None: - ax.axvline(x=p100_latency, color='g', linestyle='-', label='p100') - - fig.legend(loc="lower right") - - return fig + return n75, p100, n145 diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index 9a16b3ef2..d6a4afa77 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -54,11 +54,11 @@ # Electrode montage type: "cap" or "mark-iv" montage_type = "cap" # Ground M1, Ref Fz. -ch_names = ["Fp1", "Fp2", "T5", "T6", "O1", "O2", "Oz", "Pz"] +ch_names = ["CPz", "POz", "T5", "T6", "O1", "O2", "Oz", "Pz"] # Subject and session identifiers subject_id = 0 -session_nb = 7 +session_nb = 10 ################################################################################################### # Initiate EEG device diff --git a/examples/visual_vep/01r__pattern_reversal_viz.py b/examples/visual_vep/01r__pattern_reversal_viz.py index b63e991c2..48886527a 100644 --- a/examples/visual_vep/01r__pattern_reversal_viz.py +++ b/examples/visual_vep/01r__pattern_reversal_viz.py @@ -1,33 +1,25 @@ """ -Pattern Reversal VEP Visualization -================================== +Pattern Reversal VEP: Load and Visualize +========================================= -This example demonstrates loading, organizing, and visualizing EP response data -from the Visual Pattern Reversal VEP (PR-VEP) experiment. +This example demonstrates loading, organizing, and visualizing evoked response +data from the Visual Pattern Reversal VEP (PR-VEP) experiment. An animation of a checkerboard reversal is shown (the checkerboard squares' -colours are toggled once each half a second). - -The data used is the first subject and first session of the eeg-expy PR-VEP -example dataset, recorded using an OpenBCI Cyton with a Tencom 20 channel cap, with cup -electrodes placed at (Fp1, Fp2, T5, T6, O1, O2, Oz, Pz) fitted around a Meta -Quest 2 headset. The session used the Meta Quest 2 linked with a PC to -display the checkerboard reversal animation in VR at 120 Hz, alternating -monocular stimulation between left and right eye across blocks. - -We first use ``fetch_dataset`` to obtain the data files. If the files are not -already present in the local data directory they will be downloaded from the -cloud. - -After loading the data from the occipital channels, we place it in an MNE -``Epochs`` object, and then an ``Evoked`` object to obtain the trial-averaged -response. The final figures show the P100 response ERP waveform, a comparison -between eyes, and the interocular difference wave. +colours are toggled once each half a second). Stimulus is rendered stereoscopically +through a Meta Quest HMD and triggered via OpenBCI Cyton. + +The data used is recorded using an OpenBCI Cyton with a Tencom 20 channel cap, +with cup electrodes placed at Fp1, Fp2, T5, T6, O1, O2, Oz, Pz. + +Per-trial PC-side latency correction is applied using ``app_motion_to_photon_latency_s`` +from the LibOVR compositor frame stats sidecar, and the residual Quest Link + +panel lag is handled by a fixed ``link_panel_lag`` constant. """ ################################################################################################### # Setup -# ----- +# --------------------- import os import numpy as np @@ -41,56 +33,94 @@ from eegnb import get_recording_dir from eegnb.analysis.utils import load_csv_as_raw -from eegnb.analysis.vep_utils import plot_vep +from eegnb.analysis.vep_utils import get_pr_vep_latencies from eegnb.devices.utils import EEG_INDICES, SAMPLE_FREQS + # sphinx_gallery_thumbnail_number = 3 ################################################################################################### # Hardware lag definitions -# ------------------------ +# --------------------- # -# Known display-pipeline offsets for different setups, subtracted from epoch -# times so t=0 corresponds to actual photon delivery on the user's retina. +# The total flip-return → photon delay on this rig is split into a measured +# part and an unmeasured residual: +# +# - **Measured per-trial (PC side)**: ``app_motion_to_photon_latency_s`` from +# LibOVR frame stats, applied trial-by-trial below. +# - **Residual fit (link_panel_lag)**: Quest Link video encode/decode + USB transport +# + panel scan-out + LCD response. Rough budgets from public benchmarks: +# Link transport ≈ 20–40 ms, Panel + LCD ≈ 10–20 ms, total range ≈ 30–60 ms. +# The Cyton RF transmission adds a further unmeasured ~1–5 ms (proprietary stack, +# not standard BLE). # -# The offset shifts the software marking time forward to account for the VR -# compositor look-ahead plus USB and panel latency, aligning the measured P100 -# to the clinical ~100 ms peak. -# Ablation (vtfi-pipeline match): drop from 0.095 to 0.036. -# vtfi's same-hardware (Quest-2 + Cyton + Quest Link) notebooks use 0.036 as a -# measured constant; 0.095 here was a fit parameter chosen to land peaks near 100 ms. -quest_link_photon_lag = 0.09 +# Center of estimated unmeasured residual range (s) +link_panel_lag = 0.025 +# ± half-range (s) +link_panel_lag_err = 0.015 ################################################################################################### # Load Data -# --------- +# --------------------- +# +# Load all recordings for the session and concatenate into a single raw object. +# The timing sidecar CSV is parsed per-file and concatenated to match events. +# +# Session 8+ timing sidecars include LibOVR perf-stat columns and a ``#``-prefixed +# ``libovr_to_wallclock_offset_s`` metadata row. Earlier sessions used a 5-column +# schema without per-trial compositor latency. # -# Download the PR-VEP example dataset if it is not already present locally. - -session_dir = get_recording_dir('cyton', 'visual-PRVEP', subject_id=0, session_nb=6, site='quest-2_120Hz_cap', data_dir=os.getenv("DATA_DIR")) -csv_paths = sorted(p for p in session_dir.glob('recording_*.csv') - if not p.name.endswith('_timing.csv')) -print(f"\nFound {len(csv_paths)} recording(s) in {session_dir}") -for p in csv_paths: - print(f" {p.name}") - -# Load each recording separately so events can be aligned 1:1 with its -# timing sidecar . a trailing marker pushed after the EEG stream closes leaves -# one extra timing row, which we truncate per-file before concatenation. + +SESSION_NB = 9 +assert SESSION_NB >= 8, ( + f"This script assumes the session 8+ timing schema " + f"(LibOVR perf stats + libovr_to_wallclock_offset_s metadata row); got session {SESSION_NB}" +) + +SUBJECT_ID = 0 +DEVICE_NAME = 'cyton' +EXPERIMENT = 'visual-PRVEP' +DISPLAY = 'quest-2_120Hz' +MONTAGE = 'cap' +SITE = f'{DISPLAY}_{MONTAGE}' + +recording_dir = get_recording_dir(DEVICE_NAME, EXPERIMENT, SUBJECT_ID, SESSION_NB, site=SITE) +print(f"[data] recording dir: {recording_dir}") + +# Exclude _timing.csv sidecars — they live alongside the EEG CSVs +recording_files = sorted(p for p in recording_dir.glob('*.csv') if not p.stem.endswith('_timing')) +print(f"[data] found {len(recording_files)} EEG recording(s): {[p.name for p in recording_files]}") + per_recording = [] -for p in csv_paths: - rec_raw = load_csv_as_raw([str(p)], sfreq=SAMPLE_FREQS['cyton'], ch_ind=EEG_INDICES['cyton']) - rec_timing = pd.read_csv(p.parent / f'{p.stem}_timing.csv') +for p in recording_files: + timing_path = p.with_name(p.stem + '_timing.csv') + if not timing_path.exists(): + print(f"[skip] No timing sidecar for {p.name}") + continue + + rec_raw = load_csv_as_raw([str(p)], sfreq=250, ch_ind=EEG_INDICES['cyton'], + aux_ind=None, replace_ch_names=None, verbose=False) + + rec_timing = pd.read_csv(timing_path, comment='#').reset_index(drop=True) + rec_events = find_events(rec_raw, shortest_event=1, verbose=False) + n = min(len(rec_events), len(rec_timing)) if len(rec_events) != len(rec_timing): - print(f"[warn] {p.name}: events={len(rec_events)}, timing={len(rec_timing)} . truncating to {n}") + print(f"[warn] {p.name}: events={len(rec_events)}, timing={len(rec_timing)} — truncating to {n}") per_recording.append({ 'raw': rec_raw, 'events': rec_events[:n], 'timing': rec_timing.iloc[:n].reset_index(drop=True), }) +if not per_recording: + raise RuntimeError( + f"No recordings loaded from {recording_dir}. " + "Check SUBJECT_ID, SESSION_NB, and DEVICE_NAME are correct, " + "and that each EEG CSV has a matching _timing.csv sidecar." + ) + raw, events = concatenate_raws( [rec['raw'] for rec in per_recording], events_list=[rec['events'] for rec in per_recording], @@ -98,17 +128,8 @@ timing_df = pd.concat([rec['timing'] for rec in per_recording], ignore_index=True) assert len(events) == len(timing_df), "per-file truncation should keep events and timing aligned" -def log_channel_stats(label, data_uV, ch_names): - """data_uV: (n_channels, n_samples) in uV. Prints std, median-abs, max-abs per channel.""" - print(f"\n[{label}] per-channel stats (uV)") - print(f" {'ch':<6}{'std':>10}{'med|x|':>10}{'max|x|':>12}") - for i, ch in enumerate(ch_names): - x = data_uV[i] - print(f" {ch:<6}{np.std(x):>10.2f}{np.median(np.abs(x)):>10.2f}{np.max(np.abs(x)):>12.2f}") - print(f"\n[raw] sfreq={raw.info['sfreq']} Hz, n_samples={raw.n_times}, duration={raw.times[-1]:.1f}s") print(f"[raw] channels: {raw.ch_names}") -log_channel_stats('raw (pre-filter)', raw.get_data(picks='eeg') * 1e6, raw.copy().pick('eeg').ch_names) ################################################################################################### # Visualize the power spectrum @@ -118,67 +139,106 @@ def log_channel_stats(label, data_uV, ch_names): ################################################################################################### # Filtering -# --------- +# ---------------------------- +# +# Use FIR (linear phase) rather than IIR to avoid frequency-dependent group delay, +# which would shift the P100 peak by an amount that depends on its spectral content, +# contaminating latency measurements. MNE's zero-phase FIR cancels even the constant +# delay so the filtered P100 sits at the same sample as the unfiltered one. +# Using ISCEV bandpass standard: 1–100 Hz. # -# Use FIR rather than IIR to keep linear phase. IIR's frequency-dependent group -# delay would shift the P100 peak by an amount that depends on its spectral -# content, contaminating latency measurements. FIR applies the same delay to -# every frequency, and MNE's zero-phase filtering cancels even that constant -# shift so the filtered P100 sits at the same sample as the unfiltered one. - -# Ablation: 1 Hz HP (vtfi pipeline) instead of 2 Hz. Clinical PRVEP and the working -# vtfi notebooks all use 1 Hz; the 2 Hz cut may have been flattening P100's slow shoulder. -hp, lp = 1, 30 + +hp, lp = 1, 100 raw.filter(hp, lp, method='fir') -# raw.plot_psd(fmin=hp, fmax=lp) -log_channel_stats(f'post-filter {hp}-{lp} Hz', raw.get_data(picks='eeg') * 1e6, raw.copy().pick('eeg').ch_names) +raw.plot_psd(fmin=hp, fmax=lp) ################################################################################################### -# Per-trial compositor-lookahead correction -# ----------------------------------------- +# Per-trial PC-side photon-latency correction +# --------------------- # -# Each event sample index is shifted by the per-trial variation in the Quest -# compositor's predicted_display_time, correcting trial-by-trial timing jitter. -# The residual absolute offset is captured in quest_link_photon_lag. - -offsets_s = timing_df['predicted_display_time'].values - timing_df['software_time'].values -rel_offsets_s = offsets_s - offsets_s.mean() -sample_shifts = np.round(rel_offsets_s * raw.info['sfreq']).astype(int) -print(f"\n[lookahead] per-trial compositor jitter (ms): " - f"min={rel_offsets_s.min()*1000:+.2f} " - f"max={rel_offsets_s.max()*1000:+.2f} " - f"std={rel_offsets_s.std()*1000:.2f} " +# Each event sample index is shifted by the per-trial measured +# ``app_motion_to_photon_latency_s`` from LibOVR frame stats — a retrospective +# measurement of how long the frame actually took to reach the compositor/vsync. +# +# Missing trials (typically the first frame or two before perf stats are populated) +# fall back to the session mean. +# + +pc_lag_s = timing_df['app_motion_to_photon_latency_s'].values.astype(float) +valid = np.isfinite(pc_lag_s) & (pc_lag_s > 0) +if (~valid).any(): + fallback = pc_lag_s[valid].mean() if valid.any() else 0.0 + print(f"[warn] {int((~valid).sum())}/{len(pc_lag_s)} trials missing " + f"app_motion_to_photon_latency_s — using mean fallback {fallback*1000:.2f} ms") + pc_lag_s = np.where(valid, pc_lag_s, fallback) + +sample_shifts = np.round(pc_lag_s * raw.info['sfreq']).astype(int) +print(f"\n[pc-lag] app_motion_to_photon_latency_s (ms): " + f"min={pc_lag_s.min()*1000:.2f} " + f"max={pc_lag_s.max()*1000:.2f} " + f"mean={pc_lag_s.mean()*1000:.2f} " + f"std={pc_lag_s.std()*1000:.2f} " f"|shift| samples: max={np.abs(sample_shifts).max()}") -# Ablation: per-trial jitter correction DISABLED. The vtfi pipeline does not apply -# this and produces clean P100s on the same hardware. predicted_display_time is in -# OpenXR time and software_time in Unix epoch; only their per-trial variation around -# the mean is meaningful, but if that variation is dominated by noise rather than -# real compositor jitter, the correction scatters trials and washes out the average. -# events[:, 0] += sample_shifts + +# Per-trial PC-side-corrected event array. +events_corrected = events.copy() +events_corrected[:, 0] += sample_shifts + +################################################################################################### +# Hardware lag breakdown chart +# ---------------------------- + +pc_pipeline_lag = pc_lag_s.mean() * 1000 +unmeasured_lag = link_panel_lag * 1000 + +fig_lag, ax_lag = plt.subplots(figsize=(8, 4)) +y_pos = 0 + +ax_lag.barh(y_pos, pc_pipeline_lag, color='#4c72b0', edgecolor='white', + label=f'PC Pipeline (measured): {pc_pipeline_lag:.1f} ms') +ax_lag.barh(y_pos, unmeasured_lag, left=pc_pipeline_lag, color='#c44e52', edgecolor='white', + label=f'Quest Link + Panel + Cyton RF (unmeasured): {unmeasured_lag:.1f} ms') + +ax_lag.set_yticks([]) +ax_lag.set_xlabel('Latency from Trigger (ms)') +ax_lag.set_title('Composition of VEP Hardware Lag') + +ax_lag.errorbar(pc_pipeline_lag / 2, y_pos, xerr=pc_lag_s.std() * 1000, + color='#aec6e8', capsize=5, lw=2, label='Measured Variance (±1 SD)') +ax_lag.errorbar(pc_pipeline_lag + (unmeasured_lag / 2), y_pos, + xerr=link_panel_lag_err * 1000, + color='black', capsize=5, lw=2, + label=f'Unmeasured Uncertainty (±{link_panel_lag_err*1000:.0f}ms)') + +handles, labels = ax_lag.get_legend_handles_labels() +fig_lag.legend(handles, labels, loc='lower center', bbox_to_anchor=(0.5, 0.0), + ncol=2, fontsize=8, frameon=True) +fig_lag.subplots_adjust(bottom=0.38) ################################################################################################### # Epoching -# -------- +# ---------------------------- # # Epoch around stimulus onsets, separating left- and right-eye trials. +# Epochs are shifted by ``link_panel_lag`` to account for the residual hardware lag. +# event_id = {'left_eye': 1, 'right_eye': 2} print(f"\n[events] total={len(events)}, " f"left_eye={int((events[:, 2] == 1).sum())}, " f"right_eye={int((events[:, 2] == 2).sum())}") -epoch_metadata = timing_df -# Oz is the ISCEV-standard electrode. -PICK_CH = 'Pz' +PICK_CH = 'Oz' # ISCEV-standard electrode REJECT_UV = 35e-6 +BASELINE = (-0.1, 0) + ch_epochs = Epochs(raw, events=events, event_id=event_id, - tmin=-0.1, tmax=0.4, baseline=None, + tmin=-0.1, tmax=0.4, baseline=BASELINE, reject={'eeg': REJECT_UV}, - preload=True, - verbose=False, picks=[PICK_CH], - metadata=epoch_metadata, + preload=True, verbose=False, picks=[PICK_CH], + metadata=timing_df, event_repeated='drop') -ch_epochs.shift_time(-quest_link_photon_lag) +ch_epochs.shift_time(-link_panel_lag) n_left = len(ch_epochs['left_eye']) n_right = len(ch_epochs['right_eye']) @@ -188,14 +248,23 @@ def log_channel_stats(label, data_uV, ch_names): print(f" kept {n_total}/{len(events)} " f"(left={n_left}, right={n_right}) drop={drop_pct:.1f}%") -# Peak-to-peak distribution on surviving epochs. -ch_ptp = np.ptp(ch_epochs.get_data(picks=[PICK_CH])[:, 0, :] * 1e6, axis=-1) -print(f" {PICK_CH} ptp uV: min={ch_ptp.min():.1f} median={np.median(ch_ptp):.1f} " - f"p90={np.percentile(ch_ptp, 90):.1f} max={ch_ptp.max():.1f}") +# Corrected-events epochs on the same trial set for overlay. +ch_epochs_corr = Epochs(raw, events=events_corrected[ch_epochs.selection], + event_id=event_id, tmin=-0.1, tmax=0.4, baseline=BASELINE, + reject=None, preload=True, verbose=False, picks=[PICK_CH], + metadata=timing_df.iloc[ch_epochs.selection].reset_index(drop=True), + event_repeated='drop') +ch_epochs_corr.shift_time(-link_panel_lag) ################################################################################################### -# Oz evoked per eye -# ----------------- +# Oz evoked response: Left Eye vs Right Eye +# ----------------------------------------- +# +# Solid lines: per-trial PC lag corrected. Dotted lines: mean-corrected baseline. +# Shaded regions: ±1 SEM across trials. +# + +from scipy.ndimage import maximum_filter1d, minimum_filter1d evoked_left = ch_epochs['left_eye'].average(picks=[PICK_CH]) evoked_right = ch_epochs['right_eye'].average(picks=[PICK_CH]) @@ -205,28 +274,64 @@ def log_channel_stats(label, data_uV, ch_names): right_data = evoked_right.data[0] * 1e6 LANDMARK_MS = [75, 100, 145] # N75, P100, N145 -LANDMARK_COLORS = ['#888888', 'red', '#555555'] +LANDMARK_COLORS = ['#888888', 'green', '#555555'] LANDMARK_LABELS = ['N75 (75 ms)', 'P100 (100 ms)', 'N145 (145 ms)'] -def plot_ch(ax, data, title, color): - ax.plot(times, data, color=color, linewidth=2) +sfreq = evoked_left.info['sfreq'] +times_mean_corr = times - (pc_lag_s.mean() * 1000) + +evoked_left_corr = ch_epochs_corr['left_eye'].average(picks=[PICK_CH]) +evoked_right_corr = ch_epochs_corr['right_eye'].average(picks=[PICK_CH]) +left_corr = evoked_left_corr.data[0] * 1e6 +right_corr = evoked_right_corr.data[0] * 1e6 + +left_trials = ch_epochs_corr['left_eye'].get_data(picks=[PICK_CH])[:, 0, :] * 1e6 +right_trials = ch_epochs_corr['right_eye'].get_data(picks=[PICK_CH])[:, 0, :] * 1e6 +left_sem = left_trials.std(axis=0) / np.sqrt(len(left_trials)) +right_sem = right_trials.std(axis=0) / np.sqrt(len(right_trials)) + +# Detect and report P100 peak latencies +n75_left, p100_left, n145_left = get_pr_vep_latencies(evoked_left_corr) +n75_right, p100_right, n145_right = get_pr_vep_latencies(evoked_right_corr) + +def print_peak_info(eye_name, peak_info): + if peak_info is not None: + latency_ms = round(peak_info['latency'] * 1e3, 2) + uv = round(peak_info['amplitude'] * 1e6, 2) + print(f"[{eye_name}] {peak_info['name']} Peak: {uv} µV at {latency_ms} ms (ch={peak_info['channel']})") + +for eye, peaks in [('Left Eye', (n75_left, p100_left, n145_left)), + ('Right Eye', (n75_right, p100_right, n145_right))]: + for p in peaks: + print_peak_info(eye, p) + +def plot_ch(ax, data, color, eye_label, sem=None, data_mean_corr=None, times_mean_corr=None): + ax.plot(times, data, color=color, linewidth=2, label=f'{eye_label} (Per-trial corrected)') + if data_mean_corr is not None and times_mean_corr is not None: + ax.plot(times_mean_corr, data_mean_corr, color=color, linestyle=':', alpha=0.6, + linewidth=1.6, label=f'{eye_label} (Mean corrected)') + if sem is not None: + ax.fill_between(times, data - sem, data + sem, color=color, alpha=0.25, + label=f'{eye_label} ±1 SEM') ax.set_xlabel('Time (ms)') - ax.set_ylabel('Amplitude (uV)') - ax.set_title(title) + ax.set_ylabel('Amplitude (µV)') ax.grid(True, alpha=0.3) ax.axhline(y=0, color='black', linestyle='-', alpha=0.3) ax.axvline(x=0, color='black', linestyle='--', alpha=0.5) - for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) - ax.legend(fontsize=8, loc='upper right') -fig_l, ax_l = plt.subplots(figsize=(10, 6)) -plot_ch(ax_l, left_data, f'Left Eye . {PICK_CH} (n={len(ch_epochs["left_eye"])})', 'blue') -fig_l.tight_layout() +fig, ax = plt.subplots(figsize=(10, 6)) + +plot_ch(ax, left_corr, 'blue', 'Left Eye', sem=left_sem, + data_mean_corr=left_data, times_mean_corr=times_mean_corr) +plot_ch(ax, right_corr, 'red', 'Right Eye', sem=right_sem, + data_mean_corr=right_data, times_mean_corr=times_mean_corr) -plot_vep(evoked_left) +for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) -fig_r, ax_r = plt.subplots(figsize=(10, 6)) -plot_ch(ax_r, right_data, f'Right Eye . {PICK_CH} (n={len(ch_epochs["right_eye"])})', 'red') -fig_r.tight_layout() -plot_vep(evoked_right) +ax.set_title(f'Evoked P100 Response: Left vs Right Eye (PC Lag Corrected) — {PICK_CH}') +handles, labels = ax.get_legend_handles_labels() +by_label = dict(zip(labels, handles)) +ax.legend(by_label.values(), by_label.keys(), fontsize=10, loc='upper right') +fig.tight_layout() +plt.show() diff --git a/examples/visual_vep/01r__pattern_reversal_viz_montage_type.ipynb b/examples/visual_vep/01r__pattern_reversal_viz_montage_type.ipynb deleted file mode 100644 index 678459c90..000000000 --- a/examples/visual_vep/01r__pattern_reversal_viz_montage_type.ipynb +++ /dev/null @@ -1,1036 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 375, - "metadata": { - "collapsed": false, - "execution": { - "iopub.execute_input": "2026-04-20T10:38:53.797170Z", - "iopub.status.busy": "2026-04-20T10:38:53.797170Z", - "iopub.status.idle": "2026-04-20T10:38:54.244338Z", - "shell.execute_reply": "2026-04-20T10:38:54.243188Z" - } - }, - "outputs": [], - "source": [ - "%matplotlib inline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "# Pattern Reversal VEP Visualization\n", - "\n", - "This example demonstrates loading, organizing, and visualizing EP response data\n", - "from the Visual Pattern Reversal VEP (PR-VEP) experiment.\n", - "\n", - "An animation of a checkerboard reversal is shown (the checkerboard squares'\n", - "colours are toggled once each half a second).\n", - "\n", - "The data used is the first subject and first session of the eeg-expy PR-VEP\n", - "example dataset, recorded using an OpenBCI Cyton with a Tencom 20 channel cap, with cup \n", - "electrodes placed at (Fp1, Fp2, T5, T6, O1, O2, Oz, M2) fitted around a Meta\n", - "Quest 2 headset. The session used the Meta Quest 2 linked with a PC to\n", - "display the checkerboard reversal animation in VR at 120 Hz, alternating\n", - "monocular stimulation between left and right eye across blocks.\n", - "\n", - "We first use ``fetch_dataset`` to obtain the data files. If the files are not\n", - "already present in the local data directory they will be downloaded from the\n", - "cloud.\n", - "\n", - "After loading the data from the occipital channels, we place it in an MNE\n", - "``Epochs`` object, and then an ``Evoked`` object to obtain the trial-averaged\n", - "response. The final figures show the P100 response ERP waveform, a comparison\n", - "between eyes, and the interocular difference wave.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 376, - "metadata": { - "collapsed": false, - "execution": { - "iopub.execute_input": "2026-04-20T10:38:54.246374Z", - "iopub.status.busy": "2026-04-20T10:38:54.245871Z", - "iopub.status.idle": "2026-04-20T10:38:55.485162Z", - "shell.execute_reply": "2026-04-20T10:38:55.484064Z" - } - }, - "outputs": [], - "source": [ - "import os\n", - "import numpy as np\n", - "import warnings\n", - "warnings.filterwarnings('ignore')\n", - "\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "\n", - "from mne import Epochs, find_events, concatenate_raws\n", - "\n", - "from eegnb import get_recording_dir\n", - "from eegnb.analysis.utils import load_csv_as_raw\n", - "from eegnb.analysis.vep_utils import plot_vep\n", - "from eegnb.devices.utils import EEG_INDICES, SAMPLE_FREQS\n", - "# sphinx_gallery_thumbnail_number = 3" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Hardware lag definitions\n", - "\n", - "Known display-pipeline offsets for different setups, subtracted from epoch\n", - "times so t=0 corresponds to actual photon delivery on the user's retina.\n", - "\n", - "The offset shifts the software marking time forward to account for the VR\n", - "compositor look-ahead plus USB and panel latency, aligning the measured P100\n", - "to the clinical ~100 ms peak.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 377, - "metadata": { - "collapsed": false, - "execution": { - "iopub.execute_input": "2026-04-20T10:38:55.486166Z", - "iopub.status.busy": "2026-04-20T10:38:55.486166Z", - "iopub.status.idle": "2026-04-20T10:38:55.501157Z", - "shell.execute_reply": "2026-04-20T10:38:55.500063Z" - } - }, - "outputs": [], - "source": [ - "quest_link_photon_lag = 0.1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Load Data\n", - "\n", - "Download the PR-VEP example dataset if it is not already present locally.\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 378, - "metadata": { - "collapsed": false, - "execution": { - "iopub.execute_input": "2026-04-20T10:38:55.503202Z", - "iopub.status.busy": "2026-04-20T10:38:55.503202Z", - "iopub.status.idle": "2026-04-20T10:38:55.656702Z", - "shell.execute_reply": "2026-04-20T10:38:55.656197Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Found 1 recording(s) in C:\\Users\\pelle\\.eegnb\\data\\visual-PRVEP\\quest-2_120Hz_cap\\cyton\\subject0000\\session006\n", - " recording_2026-04-20-10.16.43.csv\n", - "\n", - "\n", - "Loading these files: \n", - "\n", - "C:\\Users\\pelle\\.eegnb\\data\\visual-PRVEP\\quest-2_120Hz_cap\\cyton\\subject0000\\session006\\recording_2026-04-20-10.16.43.csv\n", - "\n", - "\n", - "\n", - "\n", - "['Fp1', 'Fp2', 'T5', 'T6', 'O1', 'O2', 'Oz', 'Pz', 'stim']\n", - "['Fp1', 'Fp2', 'T5', 'T6', 'O1', 'O2', 'Oz', 'Pz', 'stim']\n", - "Creating RawArray with float64 data, n_channels=9, n_times=107310\n", - " Range : 0 ... 107309 = 0.000 ... 429.236 secs\n", - "Ready.\n", - "\n", - "[raw] sfreq=250.0 Hz, n_samples=107310, duration=429.2s\n", - "[raw] channels: ['Fp1', 'Fp2', 'T5', 'T6', 'O1', 'O2', 'Oz', 'Pz', 'stim']\n", - "\n", - "[raw (pre-filter)] per-channel stats (uV)\n", - " ch std med|x| max|x|\n", - " Fp1 530.16 41126.14 42050.27\n", - " Fp2 217.72 35935.93 36781.09\n", - " T5 243.38 8042.83 8594.56\n", - " T6 7610.38 26502.41 34369.45\n", - " O1 2324.53 106495.75 108492.48\n", - " O2 115.86 7272.61 7631.31\n", - " Oz 142.44 81171.27 81584.22\n", - " Pz 1099.70 46624.62 49031.75\n" - ] - } - ], - "source": [ - "\n", - "session_dir = get_recording_dir('cyton', 'visual-PRVEP', subject_id=0, session_nb=6, site='quest-2_120Hz_cap', data_dir=os.getenv(\"DATA_DIR\"))\n", - "csv_paths = sorted(p for p in session_dir.glob('recording_*.csv')\n", - " if not p.name.endswith('_timing.csv'))\n", - "print(f\"\\nFound {len(csv_paths)} recording(s) in {session_dir}\")\n", - "for p in csv_paths:\n", - " print(f\" {p.name}\")\n", - "\n", - "# Load each recording separately so events can be aligned 1:1 with its\n", - "# timing sidecar . a trailing marker pushed after the EEG stream closes leaves\n", - "# one extra timing row, which we truncate per-file before concatenation.\n", - "per_recording = []\n", - "for p in csv_paths:\n", - " rec_raw = load_csv_as_raw([str(p)], sfreq=SAMPLE_FREQS['cyton'], ch_ind=EEG_INDICES['cyton'])\n", - " rec_timing = pd.read_csv(p.parent / f'{p.stem}_timing.csv')\n", - " rec_events = find_events(rec_raw, shortest_event=1, verbose=False)\n", - " n = min(len(rec_events), len(rec_timing))\n", - " if len(rec_events) != len(rec_timing):\n", - " print(f\"[warn] {p.name}: events={len(rec_events)}, timing={len(rec_timing)} . truncating to {n}\")\n", - " per_recording.append({\n", - " 'raw': rec_raw,\n", - " 'events': rec_events[:n],\n", - " 'timing': rec_timing.iloc[:n].reset_index(drop=True),\n", - " })\n", - "\n", - "raw, events = concatenate_raws(\n", - " [rec['raw'] for rec in per_recording],\n", - " events_list=[rec['events'] for rec in per_recording],\n", - ")\n", - "timing_df = pd.concat([rec['timing'] for rec in per_recording], ignore_index=True)\n", - "assert len(events) == len(timing_df), \"per-file truncation should keep events and timing aligned\"\n", - "\n", - "def log_channel_stats(label, data_uV, ch_names):\n", - " \"\"\"data_uV: (n_channels, n_samples) in uV. Prints std, median-abs, max-abs per channel.\"\"\"\n", - " print(f\"\\n[{label}] per-channel stats (uV)\")\n", - " print(f\" {'ch':<6}{'std':>10}{'med|x|':>10}{'max|x|':>12}\")\n", - " for i, ch in enumerate(ch_names):\n", - " x = data_uV[i]\n", - " print(f\" {ch:<6}{np.std(x):>10.2f}{np.median(np.abs(x)):>10.2f}{np.max(np.abs(x)):>12.2f}\")\n", - "\n", - "\n", - "print(f\"\\n[raw] sfreq={raw.info['sfreq']} Hz, n_samples={raw.n_times}, duration={raw.times[-1]:.1f}s\")\n", - "print(f\"[raw] channels: {raw.ch_names}\")\n", - "log_channel_stats('raw (pre-filter)', raw.get_data(picks='eeg') * 1e6, raw.copy().pick('eeg').ch_names)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Visualize the power spectrum\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 379, - "metadata": { - "collapsed": false, - "execution": { - "iopub.execute_input": "2026-04-20T10:38:55.658708Z", - "iopub.status.busy": "2026-04-20T10:38:55.658708Z", - "iopub.status.idle": "2026-04-20T10:38:56.154617Z", - "shell.execute_reply": "2026-04-20T10:38:56.154058Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NOTE: plot_psd() is a legacy function. New code should use .compute_psd().plot().\n", - "Effective window size : 8.192 (s)\n", - "Plotting power spectral density (dB=True).\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "execution_count": 379, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "raw.plot_psd()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Filtering\n", - "\n", - "Use FIR rather than IIR to keep linear phase. IIR's frequency-dependent group\n", - "delay would shift the P100 peak by an amount that depends on its spectral\n", - "content, contaminating latency measurements. FIR applies the same delay to\n", - "every frequency, and MNE's zero-phase filtering cancels even that constant\n", - "shift so the filtered P100 sits at the same sample as the unfiltered one.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 380, - "metadata": { - "collapsed": false, - "execution": { - "iopub.execute_input": "2026-04-20T10:38:56.156129Z", - "iopub.status.busy": "2026-04-20T10:38:56.156129Z", - "iopub.status.idle": "2026-04-20T10:38:56.247148Z", - "shell.execute_reply": "2026-04-20T10:38:56.246642Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Filtering raw data in 1 contiguous segment\n", - "Setting up band-pass filter from 1 - 30 Hz\n", - "\n", - "FIR filter parameters\n", - "---------------------\n", - "Designing a one-pass, zero-phase, non-causal bandpass filter:\n", - "- Windowed time-domain design (firwin) method\n", - "- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation\n", - "- Lower passband edge: 1.00\n", - "- Lower transition bandwidth: 1.00 Hz (-6 dB cutoff frequency: 0.50 Hz)\n", - "- Upper passband edge: 30.00 Hz\n", - "- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)\n", - "- Filter length: 825 samples (3.300 s)\n", - "\n", - "NOTE: plot_psd() is a legacy function. New code should use .compute_psd().plot().\n", - "Effective window size : 8.192 (s)\n", - "Plotting power spectral density (dB=True).\n", - "\n", - "[post-filter 1-30 Hz] per-channel stats (uV)\n", - " ch std med|x| max|x|\n", - " Fp1 14.37 4.77 180.98\n", - " Fp2 12.33 3.85 176.96\n", - " T5 28.26 12.58 339.92\n", - " T6 270.31 36.96 4608.44\n", - " O1 38.08 9.22 1731.93\n", - " O2 17.64 10.09 470.42\n", - " Oz 8.49 4.72 83.95\n", - " Pz 6.72 3.51 69.31\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "hp, lp = 1, 30\n", - "raw.filter(hp, lp, method='fir')\n", - "raw.plot_psd(fmin=hp, fmax=lp)\n", - "log_channel_stats(f'post-filter {hp}-{lp} Hz', raw.get_data(picks='eeg') * 1e6, raw.copy().pick('eeg').ch_names)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Per-trial compositor-lookahead correction\n", - "\n", - "Each event sample index is shifted by the per-trial variation in the Quest\n", - "compositor's predicted_display_time, correcting trial-by-trial timing jitter.\n", - "The residual absolute offset is captured in quest_link_photon_lag." - ] - }, - { - "cell_type": "code", - "execution_count": 381, - "metadata": { - "collapsed": false, - "execution": { - "iopub.execute_input": "2026-04-20T10:38:56.265444Z", - "iopub.status.busy": "2026-04-20T10:38:56.265444Z", - "iopub.status.idle": "2026-04-20T10:38:56.279331Z", - "shell.execute_reply": "2026-04-20T10:38:56.278239Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "[lookahead] per-trial compositor jitter (ms): min=-32.15 max=+13.15 std=4.07 |shift| samples: max=8\n" - ] - } - ], - "source": [ - "offsets_s = timing_df['predicted_display_time'].values - timing_df['software_time'].values\n", - "rel_offsets_s = offsets_s - offsets_s.mean()\n", - "sample_shifts = np.round(rel_offsets_s * raw.info['sfreq']).astype(int)\n", - "print(f\"\\n[lookahead] per-trial compositor jitter (ms): \"\n", - " f\"min={rel_offsets_s.min()*1000:+.2f} \"\n", - " f\"max={rel_offsets_s.max()*1000:+.2f} \"\n", - " f\"std={rel_offsets_s.std()*1000:.2f} \"\n", - " f\"|shift| samples: max={np.abs(sample_shifts).max()}\")\n", - "# Per-trial jitter-corrected event array. Kept separate from the raw `events` so\n", - "# both can be overlaid on evoked plots (raw = solid, corrected = dashed) to\n", - "# show side-by-side whether the per-trial compositor-lookahead shift helps.\n", - "events_corrected = events.copy()\n", - "events_corrected[:, 0] += sample_shifts" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Epoching\n", - "\n", - "Epoch around stimulus onsets, separating left- and right-eye trials.\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 382, - "metadata": { - "collapsed": false, - "execution": { - "iopub.execute_input": "2026-04-20T10:38:56.280331Z", - "iopub.status.busy": "2026-04-20T10:38:56.280331Z", - "iopub.status.idle": "2026-04-20T10:38:56.357049Z", - "shell.execute_reply": "2026-04-20T10:38:56.356419Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "[events] total=800, left_eye=400, right_eye=400\n", - "\n", - "[Pz epochs] reject ptp = 35 uV\n", - " kept 734/800 (left=362, right=372) drop=8.3%\n", - " Pz ptp uV: min=10.1 median=19.9 p90=28.3 max=34.8\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", - " \n", - " \n", - " General\n", - "
MNE object typeEpochs
Measurement dateUnknown
ParticipantUnknown
ExperimenterUnknown
\n", - " \n", - " \n", - " Acquisition\n", - "
Total number of events734
Events counts\n", - " \n", - " left_eye: 362\n", - "
\n", - " \n", - " right_eye: 372\n", - " \n", - " \n", - "
Time range-0.200 – 0.300 s
Baselineoff
Sampling frequency250.00 Hz
Time points126
Metadata734 rows × 5 columns
\n", - " \n", - " \n", - " Channels\n", - "
EEG\n", - " \n", - "\n", - " \n", - "
Head & sensor digitization11 points
\n", - " \n", - " \n", - " Filters\n", - "
Highpass1.00 Hz
Lowpass30.00 Hz
" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 382, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "event_id = {'left_eye': 1, 'right_eye': 2}\n", - "print(f\"\\n[events] total={len(events)}, \"\n", - " f\"left_eye={int((events[:, 2] == 1).sum())}, \"\n", - " f\"right_eye={int((events[:, 2] == 2).sum())}\")\n", - "epoch_metadata = timing_df\n", - "\n", - "# Oz is the ISCEV-standard electrode.\n", - "PICK_CH = 'Pz'\n", - "REJECT_UV = 35e-6\n", - "ch_epochs = Epochs(raw, events=events, event_id=event_id,\n", - " tmin=-0.1, tmax=0.4, baseline=None,\n", - " reject={'eeg': REJECT_UV},\n", - " preload=True,\n", - " verbose=False, picks=[PICK_CH],\n", - " metadata=epoch_metadata,\n", - " event_repeated='drop')\n", - "ch_epochs.shift_time(-quest_link_photon_lag)\n", - "\n", - "n_left = len(ch_epochs['left_eye'])\n", - "n_right = len(ch_epochs['right_eye'])\n", - "n_total = n_left + n_right\n", - "drop_pct = (1 - n_total / len(events)) * 100\n", - "print(f\"\\n[{PICK_CH} epochs] reject ptp = {REJECT_UV * 1e6:.0f} uV\")\n", - "print(f\" kept {n_total}/{len(events)} \"\n", - " f\"(left={n_left}, right={n_right}) drop={drop_pct:.1f}%\")\n", - "\n", - "# Peak-to-peak distribution on surviving epochs.\n", - "ch_ptp = np.ptp(ch_epochs.get_data(picks=[PICK_CH])[:, 0, :] * 1e6, axis=-1)\n", - "print(f\" {PICK_CH} ptp uV: min={ch_ptp.min():.1f} median={np.median(ch_ptp):.1f} \"\n", - " f\"p90={np.percentile(ch_ptp, 90):.1f} max={ch_ptp.max():.1f}\")\n", - "\n", - "# Corrected-events epochs on the same trial set (ch_epochs.selection) for overlay.\n", - "ch_epochs_corr = Epochs(raw, events=events_corrected[ch_epochs.selection],\n", - " event_id=event_id, tmin=-0.1, tmax=0.4, baseline=None,\n", - " reject=None, preload=True, verbose=False, picks=[PICK_CH],\n", - " metadata=epoch_metadata.iloc[ch_epochs.selection].reset_index(drop=True),\n", - " event_repeated='drop')\n", - "ch_epochs_corr.shift_time(-quest_link_photon_lag)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Oz evoked per eye\n" - ] - }, - { - "cell_type": "code", - "execution_count": 383, - "metadata": { - "collapsed": false, - "execution": { - "iopub.execute_input": "2026-04-20T10:38:56.359555Z", - "iopub.status.busy": "2026-04-20T10:38:56.359555Z", - "iopub.status.idle": "2026-04-20T10:38:57.042673Z", - "shell.execute_reply": "2026-04-20T10:38:57.042103Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "N75 Peak of -4.09 µV at 21.59 ms in peak_channel Pz\n", - "P100 Peak of 0.13 µV at 106.16 ms in peak_channel Pz\n", - "N145 Peak of -1.08 µV at 132.79 ms in peak_channel Pz\n", - "Need more than one channel to make topography for eeg. Disabling interactivity.\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 383, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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B+X+DVqUZNRr1BHkyycXnnxSrUZhMobHmgJGPTfddJPdu0GILUREuNbPnxdJStIp1omJOJ/ZuWfBCT9yQgghhBBCCLHRcMvMlyFiTFFsD8zjIYQQQgghhBAvsG/fPqlXr550795drr++h/Ts2U369OkvW7ZsS3O/2bNny7hxo8V0O4qPj5dHH31UunTpIl27dpX169en3hf9iNH3uGPHjvLZZ59l+tqvvfZamscdOnRI9VC28vXXX6vn79ixo7z11lupt2/btk1uuOEG6dSpk9x7771yDoregzz88MNqf5wEhTEhhBBCCCGEeIlSpUrJV199JTNmzJX33psvHTpcJ6NHP6L+FxsbK6+88oo899xzaR4zY8YnEheXLAsXLpI33nhDHnnkEUlISJDNmzfL559/roT0nDlz5OOPP5YdO3Zc9JoQtrt375bLLrtMbf/www9yyy23yH+wwk4B6y+//LIS2gsXLpS1a9fKTz/9lCpcR44cKYsXL5bq1avLpEmTPPqZDB06VJ5//nlxEhTGhBBCgpbk5GQ5efKkWk6cOKG2if+C7+/8+fOpi6O+z+RkCTl2TC1y9CitZ1PAd3T69OnUxVHfGQkcYPeMiKe7S0bHIYqA09/PWEu7CdKly5QRadfuCiVawS+//KKOewhRA2qNv/lmmbRu3VPVHNeoUUNKly4t69atk2XLlsm1114r0dHRyrgO64j6pmfq1KnSo0eP1G2I6TfffDPNfVasWCFXXHGFFCtWTCIiItT9Fy1aJAcOHFC/x+bNm6v79e3bV92entGjR8vTTz8tvXv3lvbt28u8efNkxIgR0qFDh1TR+88//0i/fv2kV69e6nl+//13dXudOnVUNH3Xrl3iFJjBTgghJGjBTL2ZBYcR15gxY5Q7NfFPEE1Zvnx56jYGahjsOYLz5yXfM8/odeRKTpggEh0twU5cXJz873//S90eNGiQ+i0S4lEWLxZZsMD9+7/++sW/zzFjtDi2ct11It265WhXIiKSZMGCudKkSRO1DcNALIj+GmBaf+zYISWGIZJN1PngwYMq/bh+/fqp98V9NmzYkOY1ILQhoJ944onU2955552L9uXw4cPqeQ2lSpVSz48Fz5v+9ozA7Yhez507V5599ln55ptv1G/46quvViL5k08+UanaAwcOlNWrV8tvv/0mjRs3Vo9t1qyZOmdXrVpV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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "evoked_left = ch_epochs['left_eye'].average(picks=[PICK_CH])\n", - "evoked_right = ch_epochs['right_eye'].average(picks=[PICK_CH])\n", - "\n", - "times = evoked_left.times * 1000\n", - "left_data = evoked_left.data[0] * 1e6\n", - "right_data = evoked_right.data[0] * 1e6\n", - "\n", - "LANDMARK_MS = [75, 100, 145] # N75, P100, N145\n", - "LANDMARK_COLORS = ['#888888', 'red', '#555555']\n", - "LANDMARK_LABELS = ['N75 (75 ms)', 'P100 (100 ms)', 'N145 (145 ms)']\n", - "\n", - "\n", - "def plot_ch(ax, data, title, color):\n", - " ax.plot(times, data, color=color, linewidth=2)\n", - " ax.set_xlabel('Time (ms)')\n", - " ax.set_ylabel('Amplitude (uV)')\n", - " ax.set_title(title)\n", - " ax.grid(True, alpha=0.3)\n", - " ax.axhline(y=0, color='black', linestyle='-', alpha=0.3)\n", - " ax.axvline(x=0, color='black', linestyle='--', alpha=0.5)\n", - " for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS):\n", - " ax.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl)\n", - " ax.legend(fontsize=8, loc='upper right')\n", - "\n", - "\n", - "evoked_left_corr = ch_epochs_corr['left_eye'].average(picks=[PICK_CH])\n", - "evoked_right_corr = ch_epochs_corr['right_eye'].average(picks=[PICK_CH])\n", - "left_corr = evoked_left_corr.data[0] * 1e6\n", - "right_corr = evoked_right_corr.data[0] * 1e6\n", - "\n", - "fig_l, ax_l = plt.subplots(figsize=(10, 6))\n", - "plot_ch(ax_l, left_corr, f'Left Eye . {PICK_CH} (n={len(ch_epochs[\"left_eye\"])})', 'blue')\n", - "ax_l.plot(times, left_data, color='blue', linestyle=':', alpha=0.6, linewidth=1.6, label='raw (uncorrected)')\n", - "ax_l.legend(fontsize=8, loc='upper right')\n", - "fig_l.tight_layout()\n", - "\n", - "plot_vep(evoked_left_corr)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 384, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "N75 Peak of -0.06 µV at 67.17 ms in peak_channel Pz\n", - "P100 Peak of 0.47 µV at 94.6 ms in peak_channel Pz\n", - "N145 Peak of -1.03 µV at 148.62 ms in peak_channel Pz\n", - "Need more than one channel to make topography for eeg. Disabling interactivity.\n" - ] - }, - { - "data": { - "image/png": "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8Ua78MIL7fTTT7fzzjvPunXrZvPnz3e/nzdvXgZLq7Zt27qfuT9QzeKdd97p7vviiy/szTfftFatWlnlypWtVq1a9r///c9+//1397i3337brrzySve7888/3/1u7dq1lsroSCWEEBEgb968ri5qz5492YpATjYNGjSI2b6JFGHHjn9vwVKkCI7xGe/btInW4OAn8WQe1UizUijd7cwhjrA91IwZM+y2225zZvhVqlSxM844w9asWeM+V4i/oUOHOtHXpEkT+/DDD53zAPZWRxxxRFCz2J955hl77733rGLFiu55CxcudK+J8Lzsssvc9vkdAvXzzz93v1u8eLHNmjUrZUc2pqxY/PHHH23UqFHuKoOr+Pz587v6oNatW9sll1wS790TQqRwdLFq1apZPo6oxaBBg2K2XyJF4D3Tt2/wj9+wwaxo0Yz3lS79r2AMhnbtzMaNy3jfiy+atW8f/D4sXmxWubJFkscff9xdmHGOR7B5TJo0ye6//3574oknnHB75JFHrGnTpk4s3nTTTVazZs2gto9QpKaxWbNm7ue1a9dao0aNbOnSpU4oDhkyxC699FL3u7/++ssJSMTqnDlzUvYiMCXFIgt9yy232O7du+3EE0+0OnXqOMHIFQDikSL0Bx54IN67KYRIUXPurMTiP//8Y+vWrbNjjz02pvsmRKrA5wdKlSqV4f4rrrjCduzY4T5bwc489keNGjX2C0U45phjrHr16i5KWbt27f1C0XNB4HP/+uuv24oVKyxVSbmaxS1btthdd93lhCJfuYIfPny4u+KYOHGiFS5c2H0/e/bseO+qECLFoLYpu0kuixYtyjbyKIQIjBchJFNIBJDP3K5du+yQQw6xdu3aueheToUiUIuYmeLFi7uvpJ8z45nr79y501KVlIssUrOwceNG92a6jskBPlSqVMmFogcPHmzTpk2zhg0bxm0/hRCpB/VQ2Xktkh67+OKLY7ZPIoW4806zHj1Cq1nMzMqVodUsZqZNGzOfqFtQNYsRpl+/fi57SCPKmDFj3K1AgQLuYo2oH6VmCMecUsTP/y3Xf+KzWLFiAX+XyqScWCSiiPIn9eyPsmXLuq9eV5MQIgngYOx7AE/ggzMpK6ZGBEozUwZD1iOlSaL1Siry5//3Fg7+BGQoICD9icgYUqJECZchpKnk/fffd5HFJUuWuO+5vfzyyzZ6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", - "text/plain": [ - "
" - ] - }, - "execution_count": 384, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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sVq1auV5zNNPP+2eR0FJ586d3e0HH3zgDvT60N1xxx0V/MqRbLfffrs99thjrq0UFhgvWrTIzjvvvNy2tc8++9jXX3/tDqgNGzZ0B/FGjRrlecz06dNdm1b77dChg9WuXds++ugjW716tftCoS+oBMfRVZrjF1AQnSv1JVBfInVbUGBc0nOfjlvXXXedTZkyxbKysqxTp062atUqdxFHX9luvfVWF4Qj3PReqx1MnjzZtZmDDjrIXQhWgLx06VIXUDz44IPunOa788477dFHH7Xq1au7trZlyxbX4aHvd1deeaVdc801OwQp/fr1c+fH3Xff3dq1a2fLli1zx0j9TT3/0UcfnYRXj2S4/vrr3YUYdY61b9/etQGdG9euXeuOQ2pbVapUCXd7U2CM6FqzZk2sU6dOsZYtW8Yee+yxWE5OTu7vPvvss9ihhx7qfjd16tTc7Vu2bIkde+yxbvu4ceNyt2/cuDHWv39/t33YsGF5/s78+fNjrVu3jnXo0CH2zTff5G5funRprHv37u4xU6ZMKffXi2BYv3597Prrr3fvu37UzgrTu3dvd5/Ro0fnbsvOzo7dfPPNbnu/fv3y3P/333+PtWvXLnbggQfGZs6cmWd7r1693GMefvjhcnplCLrSHL+Agnz99dex4447Lvc4dtttt+1wn9Kc+1544QW3/YwzzoitWrUqd/t7770Xa9OmjfvR4xFu48ePd+3gqKOOin377bd5zn/33HOP+90RRxzhzqei85226fiW2D7U7jp37ux+p+91ifzn0XlUx8DEv92qVavY4YcfHlu7dm2FvF4Eo70dm6/9rFy5Mnbaaae53z3yyCO528Pa3hhjHHGvvfaauxKtKz1KMU1M6VJPSv/+/d3yxIkTc7frKrauVh555JF2xhln5G7XFaYRI0a4K0dKw1D6qk89dLoKrrRZpVn49txzT7v55pvd8n//+99yf71I/hXw//3vfy6lefz48S69uSi6qqirlUoX09VHX+XKle2mm25y7eftt9+277//Pvd3Tz31lK1fv961zSOOOCJ3e506dWzkyJFu+YknnnDtEdFTmuMXkEiZJ3fddZedffbZ9uOPP1rjxo0LvW9pzn0PPfSQu9UxTj3GPvUMKtNh8+bN7jiHcNNxSK699lqXyZJ4/hs8eLDtt99+LmNBafryn//8x90OGTLEtS+f2p3u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ACBJCIwBAEC5+O677+x///uftWjRwjp06GBB1bhxYzv66KPt888/t7feeivZuwMASAICYwAAAkrFt/Tz3nvv5SnopW3XXXedrVu3zu666y7r1q2btWnTxrp06WK33nqr2y5z5861q6++2g477DA3lvnEE0+0xx9/3AobRaW057///e923HHHuedTMHveeefZ//3f/7kCWiWlAmL6W3/84x93+N2HH37oXse5555rW7Zssf/85z9u//R3jzzySLv++utt+fLl7r5Lliyxv/zlL3bUUUe519G9e3e799573ePy02Nuu+0269Gjh7tvu3bt7KSTTnLb9DyF0Thjf58BANFD8S0AAFKQKjyfddZZ9sMPP9i+++7rxiFr+amnnrKvvvrKLrvsMrvmmmusUqVKts8++7jbBQsWuHThFStW2LXXXpvn+V599VX785//7NKeq1at6p5z48aNrmiWfqZMmWIPPPCA1ahRo1j7l5OTY9OmTXPLCtgLs3nzZrvooovs008/dT23TZs2tYULF9qECRPsk08+cfurVGfdb++997b09HQXwCuQ1q1StX2LFi2y3r17u9enCtN63aL/iwJeVZ7W7QEHHLDDfqjqt/5HM2fOtFWrVlmdOnWK/V4AAFIfPcYAAKSgd99919avX+96c5WurCB0xIgR7ncKMq+66irXa6reZgWZb7/9tgukZezYsS4A9qlnWYGygs8BAwa43lw9RsGygkkFpO+//77rTS6ur7/+2gWYNWvWtNatWxd6PwXx8+bNcxWrp0+f7gLwRx991I35VeCroPnggw+2N9980yZPnuxu9dpE903sBVYvsoJivW79fyZNmuR+9Bj1HKsn/Z///GeB+6FAWCnfCug/+OCDYr9OAEA4EBgDAJCibrzxRhc0+s4880zbfffd3bIqXt95550uMBX1tA4cONAtKyhW73FilWylJV9wwQU2ePBg12PsU+/qfffdZ5UrV3ZB5vfff1+sfVNwLfvtt99O76se4cRe5cMPP9xVsRYVHtPfb9CggVtXwHzFFVfkTvv0zTff5AnwRanbiT3bu+22m5uWSeOIFfwWxp8mi8AYAKKHwBgAgBSkAPGYY47ZYZsCYtE4XQWzifygWfxxyAqI1ZssBY0FFo0FVq+vxgur97U4/J5cpUbvTNeuXXfY5r8OTZ9Uq1atPL/T/M9169bN8zqkWbNm7vbuu++2119/PU+vuMYuaz7loUOHFroffuq1eqoBANHCGGMAAFKQgkW/NziR35Nar169Qn8nfgEujb/1i1jdcsstLugsyE8//eRuE3uai6KUZqldu/ZO79uoUaMSvY7E3ycWEtOYavVUa4yyesf1WpRCrYsE6pEuKqVb/AB85cqVO91nAEC4EBgDAJCCdja3sQpJFcfatWtzl7/88ssS3b8oa9ascbeJadmleS3FfR2y//7728SJE+2hhx6y1157zY1xVqCsHxXpUqr0sGHDCp06SgW7ZPXq1cX+mwCAcCAwBgAgwvxgUFQFurhVp3cmMzMzT4BcUZo0aeKmZho+fLgL9GfNmuUKhyk4VpGvfv36uWJlBfVS+wFxcYJ5AEC4MMYYAIAIUyDpj0UuqrDW559/bt9++62rhF0cKngl6rWtCEqp1rhmf85n9TSrMJkCYVW5VuEwpZ5rCipV2y5sCiypX79+hewzACA4CIwBAIgwBYudOnXKncapICpGdd5557niXFOnTi3W8/qFrH7++WerCArANU3TxRdfbF988UWB+6O5nkVTMhXE31fN4QwAiBYCYwAAIm7QoEGu11jzBI8cOTJPr7DSjy+//HLbunWrqxR96qmnFus5VU3an89Y8yOXN1Wp1nRM/jRW8+fPz/2dAuGnn37avRb1JPv3y0/zP8uhhx5a7vsLAAgWxhgDABBxCgRvvfVWV5jq8ccft+eee86aN2/uAuQff/zRpSkrNVopyYVVrc5Pacx16tRxPblKw+7YsWO5vw6NKz7nnHNcAHzKKadY48aNXaVpVdT206SHDBlS4FzG6i1eunSpm+9ZVawBANFCjzEAALCzzjrLJkyY4ALLBg0a2HfffWfLli1zAbLG6aras58eXRwKME8++WS37M+TXN40T/OLL75ol156qQt+f/31VxckqxCY9uXZZ591vd8F8ffxqKOOYowxAERQWixxAkAAAIAysmjRIjvhhBPcXMQzZsxwwXJQ9ezZ041NfuqppyqkdxsAECz0GAMAgHLRtGlTV7BLPbcKjINq7ty5LihWETKCYgCIJgJjAABQbq688ko3Llnjk4NqzJgxlpaWZtdcc02ydwUAkCQExgAAoFx7jQcPHmyffPKJTZs2zYJGPcWqxn3++ZNMAVoAAACUSURBVOdbhw4dkr07AIAkYYwxAAAoV5ou6aKLLrJffvnFpkyZYhkZGRYUF154oduv8ePHW7Vq1ZK9OwCAJCEwBgAAAABEGqnUAAAAAIBIIzAGAAAAAEQagTEAAAAAINIIjAEAAAAAkUZgDAAAAACINAJjAAAAAECkERgDAAAAACKNwBgAAAAAEGkExgAAAAAAi7L/B8sn3vxqZqUhAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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8Ua78MIL7fTTT7fzzjvPunXrZvPnz3e/nzdvXgZLq7Zt27qfuT9QzeKdd97p7vviiy/szTfftFatWlnlypWtVq1a9r///c9+//1397i3337brrzySve7888/3/1u7dq1lsroSCWEEBEgb968ri5qz5492YpATjYNGjSI2b6JFGHHjn9vwVKkCI7xGe/btInW4OAn8WQe1UizUijd7cwhjrA91IwZM+y2225zZvhVqlSxM844w9asWeM+V4i/oUOHOtHXpEkT+/DDD53zAPZWRxxxRFCz2J955hl77733rGLFiu55CxcudK+J8Lzsssvc9vkdAvXzzz93v1u8eLHNmjUrZUc2pqxY/PHHH23UqFHuKoOr+Pz587v6oNatW9sll1wS790TQqRwdLFq1apZPo6oxaBBg2K2XyJF4D3Tt2/wj9+wwaxo0Yz3lS79r2AMhnbtzMaNy3jfiy+atW8f/D4sXmxWubJFkscff9xdmHGOR7B5TJo0ye6//3574oknnHB75JFHrGnTpk4s3nTTTVazZs2gto9QpKaxWbNm7ue1a9dao0aNbOnSpU4oDhkyxC699FL3u7/++ssJSMTqnDlzUvYiMCXFIgt9yy232O7du+3EE0+0OnXqOMHIFQDikSL0Bx54IN67KYRIUXPurMTiP//8Y+vWrbNjjz02pvsmRKrA5wdKlSqV4f4rrrjCduzY4T5bwc489keNGjX2C0U45phjrHr16i5KWbt27f1C0XNB4HP/+uuv24oVKyxVSbmaxS1btthdd93lhCJfuYIfPny4u+KYOHGiFS5c2H0/e/bseO+qECLFoLYpu0kuixYtyjbyKIQIjBchJFNIBJDP3K5du+yQQw6xdu3aueheToUiUIuYmeLFi7uvpJ8z45nr79y501KVlIssUrOwceNG92a6jskBPlSqVMmFogcPHmzTpk2zhg0bxm0/hRCpB/VQ2Xktkh67+OKLY7ZPIoW4806zHj1Cq1nMzMqVodUsZqZNGzOfqFtQNYsRpl+/fi57SCPKmDFj3K1AgQLuYo2oH6VmCMecUsTP/y3Xf+KzWLFiAX+XyqScWCSiiPIn9eyPsmXLuq9eV5MQIgngYOx7AE/ggzMpK6ZGBEozUwZD1iOlSaL1Siry5//3Fg7+BGQoICD9icgYUqJECZchpKnk/fffd5HFJUuWuO+5vfzyyzZ6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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "\n", - "fig_r, ax_r = plt.subplots(figsize=(10, 6))\n", - "plot_ch(ax_r, right_corr, f'Right Eye . {PICK_CH} (n={len(ch_epochs[\"right_eye\"])})', 'red')\n", - "ax_r.plot(times, right_data, color='red', linestyle=':', alpha=0.6, linewidth=1.6, label='raw (uncorrected)')\n", - "ax_r.legend(fontsize=8, loc='upper right')\n", - "fig_r.tight_layout()\n", - "plot_vep(evoked_right_corr)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "eeg-experiments", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.20" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} From af6cd752c6d56b9d005a862f91c2893db2a9d0d7 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Wed, 22 Apr 2026 22:15:31 +1000 Subject: [PATCH 43/94] fixed import --- eegnb/devices/meta_quest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eegnb/devices/meta_quest.py b/eegnb/devices/meta_quest.py index a371629f0..f7d140a0b 100644 --- a/eegnb/devices/meta_quest.py +++ b/eegnb/devices/meta_quest.py @@ -41,7 +41,7 @@ def sync_vr_clock(self): return self.libovr_to_wallclock_offset try: - from psychxr.libovr import getTimeInSeconds + from psychxr.drivers.libovr import getTimeInSeconds best_bracket = None best_offset = None for _ in range(21): From 6f0f655cfd029cd5f254c4d62c98bbff812dc834 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Wed, 22 Apr 2026 22:19:58 +1000 Subject: [PATCH 44/94] fixed again --- eegnb/devices/meta_quest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eegnb/devices/meta_quest.py b/eegnb/devices/meta_quest.py index f7d140a0b..dcbe519fa 100644 --- a/eegnb/devices/meta_quest.py +++ b/eegnb/devices/meta_quest.py @@ -41,12 +41,12 @@ def sync_vr_clock(self): return self.libovr_to_wallclock_offset try: - from psychxr.drivers.libovr import getTimeInSeconds + from psychxr.drivers.libovr import timeInSeconds best_bracket = None best_offset = None for _ in range(21): t0 = time() - lovr = getTimeInSeconds() + lovr = timeInSeconds() t1 = time() bracket = t1 - t0 offset = 0.5 * (t0 + t1) - lovr From 054521de77e216c35b2c2415272e2588a73084dd Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 23 Apr 2026 19:53:42 +1000 Subject: [PATCH 45/94] dropped support for python 3.8 --- .github/workflows/test.yml | 2 +- environments/eeg-expy-full.yml | 2 +- requirements.txt | 12 ++---------- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 570a8bc54..29ed3c1b8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -17,7 +17,7 @@ jobs: fail-fast: false matrix: os: ['ubuntu-22.04', windows-latest, macOS-latest] - python_version: ['3.8'] + python_version: ['3.9'] include: # PsychoPy currently restricted to <= 3.10 - os: ubuntu-22.04 diff --git a/environments/eeg-expy-full.yml b/environments/eeg-expy-full.yml index 224eb9908..3a8ae89f3 100644 --- a/environments/eeg-expy-full.yml +++ b/environments/eeg-expy-full.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.8,<=3.10 # psychopy <= 3.10 + - python>=3.9,<=3.10 # psychopy 2026.x requires gevent>=25, which has no py3.8 wheel - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - numpy # fix PsychXR numpy dependency DLL issues on Windows diff --git a/requirements.txt b/requirements.txt index 7fc2a4f94..2c1fceb13 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,8 +3,7 @@ scikit-learn>=0.23.2 pandas>=1.1.4 -numpy>=1.26.0; python_version >= "3.9" -numpy<=1.24.4; python_version == "3.8" +numpy>=1.26.0 mne>=0.20.8 seaborn>=0.11.0 pyriemann>=0.2.7 @@ -60,8 +59,7 @@ ffpyplayer==4.5.2 # 4.5.3 fails to build as wheel. psychtoolbox scikit-learn>=0.23.2 pandas>=1.1.4 -numpy>=1.26.0; python_version >= "3.9" -numpy==1.24.4; python_version == "3.8" +numpy>=1.26.0; mne>=0.20.8 seaborn>=0.11.0 pysocks>=1.7.1 @@ -72,18 +70,12 @@ airium>=0.1.0 attrdict>=2.0.1 attrdict3 -# pywinhook needs some special treatment since there are only wheels on PyPI for Python 3.7-3.8, and building requires special tools (swig, VS C++ tools) -# See issue: https://github.com/NeuroTechX/eeg-notebooks/issues/29 -pywinhook>=1.6.0 ; platform_system == "Windows" and (python_version == "3.7" or python_version == "3.8") -pywinhook @ https://github.com/ActivityWatch/wheels/raw/master/pywinhook/pyWinhook-1.6.2-cp39-cp39-win_amd64.whl ; platform_system == "Windows" and python_version == "3.9" - # pyglet downgrade to prevent threadmode warning on windows # See issue: https://github.com/psychopy/psychopy/issues/2876 pyglet==1.4.11 ; platform_system == "Windows" # Oculus/Quest VR support - prebuilt Windows wheels from the fork's GitHub # release (0.2.6rc1 adds Python 3.10 support). PyPI only has 0.2.4 (<= 3.9). -psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp38-cp38-win_amd64.whl ; platform_system == "Windows" and python_version == "3.8" psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp39-cp39-win_amd64.whl ; platform_system == "Windows" and python_version == "3.9" psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp310-cp310-win_amd64.whl ; platform_system == "Windows" and python_version == "3.10" From 4a7d01c6e983ca24a631b651547aecf728fd25dc Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 23 Apr 2026 20:03:14 +1000 Subject: [PATCH 46/94] try building newer versions of python --- .github/workflows/test.yml | 11 +++++++++++ requirements.txt | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 29ed3c1b8..771e86d52 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,6 +13,7 @@ jobs: defaults: run: shell: bash -el {0} + continue-on-error: ${{ matrix.experimental == true }} strategy: fail-fast: false matrix: @@ -22,6 +23,16 @@ jobs: # PsychoPy currently restricted to <= 3.10 - os: ubuntu-22.04 python_version: '3.10' + # Experimental: PsychoPy not officially supported on 3.11+ + - os: ubuntu-22.04 + python_version: '3.11' + experimental: true + - os: ubuntu-22.04 + python_version: '3.12' + experimental: true + - os: ubuntu-22.04 + python_version: '3.13' + experimental: true steps: - uses: actions/checkout@v2 diff --git a/requirements.txt b/requirements.txt index 2c1fceb13..b666192c9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -74,8 +74,9 @@ attrdict3 # See issue: https://github.com/psychopy/psychopy/issues/2876 pyglet==1.4.11 ; platform_system == "Windows" -# Oculus/Quest VR support - prebuilt Windows wheels from the fork's GitHub +# Quest-link VR support - prebuilt Windows wheels from the fork's GitHub # release (0.2.6rc1 adds Python 3.10 support). PyPI only has 0.2.4 (<= 3.9). +# psychxr/quest-link is Windows-only. psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp39-cp39-win_amd64.whl ; platform_system == "Windows" and python_version == "3.9" psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp310-cp310-win_amd64.whl ; platform_system == "Windows" and python_version == "3.10" From 50c83ad09525abf78b785bac12533aaaf84ce21a Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 23 Apr 2026 20:26:56 +1000 Subject: [PATCH 47/94] fixed syntax --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index b666192c9..ebfa02305 100644 --- a/requirements.txt +++ b/requirements.txt @@ -59,7 +59,7 @@ ffpyplayer==4.5.2 # 4.5.3 fails to build as wheel. psychtoolbox scikit-learn>=0.23.2 pandas>=1.1.4 -numpy>=1.26.0; +numpy>=1.26.0 mne>=0.20.8 seaborn>=0.11.0 pysocks>=1.7.1 From b22399031460c8e2635d9a7ed988220b63cce036 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 23 Apr 2026 20:39:44 +1000 Subject: [PATCH 48/94] drop support for py3.9 --- .github/workflows/test.yml | 5 +---- environments/eeg-expy-docsbuild.yml | 2 +- environments/eeg-expy-full.yml | 2 +- environments/eeg-expy-stimpres.yml | 2 +- environments/eeg-expy-streaming.yml | 2 +- environments/eeg-expy-streamstim.yml | 2 +- requirements.txt | 3 +-- 7 files changed, 7 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 771e86d52..c69993370 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,11 +18,8 @@ jobs: fail-fast: false matrix: os: ['ubuntu-22.04', windows-latest, macOS-latest] - python_version: ['3.9'] + python_version: ['3.10'] include: - # PsychoPy currently restricted to <= 3.10 - - os: ubuntu-22.04 - python_version: '3.10' # Experimental: PsychoPy not officially supported on 3.11+ - os: ubuntu-22.04 python_version: '3.11' diff --git a/environments/eeg-expy-docsbuild.yml b/environments/eeg-expy-docsbuild.yml index 2ef84acbf..b896f363d 100644 --- a/environments/eeg-expy-docsbuild.yml +++ b/environments/eeg-expy-docsbuild.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.8,<=3.13 + - python>=3.10,<=3.13 - setuptools - pytables # install pytables for macOS arm64, so do not need to build from source. - rust # used by docsbuild diff --git a/environments/eeg-expy-full.yml b/environments/eeg-expy-full.yml index 3a8ae89f3..0cd266bce 100644 --- a/environments/eeg-expy-full.yml +++ b/environments/eeg-expy-full.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.9,<=3.10 # psychopy 2026.x requires gevent>=25, which has no py3.8 wheel + - python=3.10 # psychopy 2026.x requires py3.10 - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - numpy # fix PsychXR numpy dependency DLL issues on Windows diff --git a/environments/eeg-expy-stimpres.yml b/environments/eeg-expy-stimpres.yml index 069d1020b..93c7749d8 100644 --- a/environments/eeg-expy-stimpres.yml +++ b/environments/eeg-expy-stimpres.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.8,<=3.10 # psychopy <= 3.10 + - python=3.10 # psychopy 2026.x requires py3.10 - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - wxpython>=4.0 # install wxpython to prevent error on macOS arm64: "site-packages/wx/_core.cpython-38-darwin.so, 0x0002): symbol not found in flat namespace '__ZN10wxBoxSizer20InformFirstDirectionEiii'" diff --git a/environments/eeg-expy-streaming.yml b/environments/eeg-expy-streaming.yml index 554dc2d3d..0e24d3cee 100644 --- a/environments/eeg-expy-streaming.yml +++ b/environments/eeg-expy-streaming.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.8,<=3.13 + - python>=3.10,<=3.13 - setuptools - liblsl # install liblsl to prevent error on macOS and Ubuntu: "RuntimeError: LSL binary library file was not found." - pip diff --git a/environments/eeg-expy-streamstim.yml b/environments/eeg-expy-streamstim.yml index e6d8b1455..02bd8be00 100644 --- a/environments/eeg-expy-streamstim.yml +++ b/environments/eeg-expy-streamstim.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.8,<=3.10 # psychopy <= 3.10 + - python=3.10 # psychopy <= 3.10 - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - liblsl # install liblsl to prevent error on macOS and Ubuntu: "RuntimeError: LSL binary library file was not found." diff --git a/requirements.txt b/requirements.txt index ebfa02305..00a2c3dbe 100644 --- a/requirements.txt +++ b/requirements.txt @@ -75,9 +75,8 @@ attrdict3 pyglet==1.4.11 ; platform_system == "Windows" # Quest-link VR support - prebuilt Windows wheels from the fork's GitHub -# release (0.2.6rc1 adds Python 3.10 support). PyPI only has 0.2.4 (<= 3.9). +# release (0.2.6rc1 adds Python 3.10 support). # psychxr/quest-link is Windows-only. -psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp39-cp39-win_amd64.whl ; platform_system == "Windows" and python_version == "3.9" psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp310-cp310-win_amd64.whl ; platform_system == "Windows" and python_version == "3.10" # PsychoPy/PsychXR does not yet officially support Python > 3.10; the wheels below are experimental. From 7d5b92a02dec06bbce4fbe4ea66232c740257519 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 23 Apr 2026 21:02:47 +1000 Subject: [PATCH 49/94] stop crashing due to no ftdi driver --- .github/workflows/test.yml | 8 +------- eegnb/devices/eeg.py | 5 ++++- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c69993370..45afcb2c1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,13 +43,7 @@ jobs: environment-file: environments/eeg-expy-full.yml activate-environment: eeg-expy-full python-version: ${{ matrix.python_version }} - - - name: Fix PsychXR numpy dependency DLL issues (Windows only) - if: matrix.os == 'windows-latest' - run: | - conda install --force-reinstall numpy - - - name: Run eegnb install test + - name: Run eeg-expy install test run: | if [ "$RUNNER_OS" == "Linux" ]; then Xvfb :0 -screen 0 1024x768x24 -ac +extension GLX +render -noreset &> xvfb.log & diff --git a/eegnb/devices/eeg.py b/eegnb/devices/eeg.py index 51e08bcac..331f3e363 100644 --- a/eegnb/devices/eeg.py +++ b/eegnb/devices/eeg.py @@ -20,7 +20,10 @@ from serial import Serial, EIGHTBITS, PARITY_NONE, STOPBITS_ONE -import pyxid2 +try: + import pyxid2 +except Exception: + pyxid2 = None from eegnb.devices.utils import ( get_openbci_usb, From af80314d29b7da53ab3dc2a44288559d24a94124 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 23 Apr 2026 21:07:54 +1000 Subject: [PATCH 50/94] bump pyobjc for psychopy --- requirements.txt | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/requirements.txt b/requirements.txt index 00a2c3dbe..25ae1b511 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,9 +14,7 @@ pysocks>=1.7.1 pyserial>=3.5 h5py>=3.1.0 pytest-shutil -#pynput requires pyobjc, psychopy requires a version less than 8, setting pyobjc to -# a specific version prevents an endless dependency resolution loop. -pyobjc==7.3; sys_platform == 'darwin' +pyobjc>=8.0; sys_platform == 'darwin' airium>=0.1.0 attrdict>=2.0.1 attrdict3 @@ -34,9 +32,7 @@ pysocks>=1.7.1 pyserial>=3.5 h5py>=3.1.0 pytest-shutil -#pynput requires pyobjc, psychopy requires a version less than 8, setting pyobjc to -# a specific version prevents an endless dependency resolution loop. -pyobjc==7.3; sys_platform == 'darwin' +pyobjc>=8.0; sys_platform == 'darwin' #Removed keyboard dependency due segmentation fault on Apple Silicon: https://github.com/boppreh/keyboard/issues/507 pynput airium>=0.1.0 @@ -47,9 +43,7 @@ click ## ~~ Stimpres Requirements ~~ -#pynput requires pyobjc, psychopy requires a version less than 8, setting pyobjc to -# a specific version prevents an endless dependency resolution loop. -pyobjc==7.3; sys_platform == 'darwin' +pyobjc>=8.0; sys_platform == 'darwin' #upgrade psychopy to use newer wxpython dependency which is prebuilt for m1 support. # Forked with a fix for Rift stereo projection matrix crash under strict-ndim psychxr. psychopy @ git+https://github.com/pellet/psychopy.git@v2026.2.0-rift-fix From 916317b4b33e8660736711c4538cb4f02145bbc6 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 23 Apr 2026 21:09:44 +1000 Subject: [PATCH 51/94] no more 3.9 --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 45afcb2c1..c5e5cbd43 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -70,7 +70,7 @@ jobs: fail-fast: false matrix: os: ['ubuntu-22.04'] - python_version: [3.9] + python_version: [3.10] steps: - uses: actions/checkout@v2 From 4cfbaaee1754d7893f4eaf1d29a65b6e33652523 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 23 Apr 2026 22:09:40 +1000 Subject: [PATCH 52/94] better handle sound on macos builds --- eegnb/experiments/__init__.py | 12 ++++++++++-- requirements.txt | 4 ++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/eegnb/experiments/__init__.py b/eegnb/experiments/__init__.py index 8532c0f76..824871302 100644 --- a/eegnb/experiments/__init__.py +++ b/eegnb/experiments/__init__.py @@ -4,6 +4,7 @@ from psychopy import sound, plugins, prefs import platform +import logging # PTB does not yet support macOS Apple Silicon freely, need to fall back to sounddevice. if platform.system() == 'Darwin' and platform.machine() == 'arm64': @@ -15,10 +16,17 @@ # Force reload sound module import importlib importlib.reload(sound) - # setting prefs.hardware['audio_device'] still falls back to a default device, need to use setDevice. + + # Try to set the audio device if requested and available audio_device = prefs.hardware.get('audioDevice', 'default') if audio_device and audio_device != 'default': - sound.setDevice(audio_device) + if hasattr(sound, 'setDevice'): + try: + sound.setDevice(audio_device) + except Exception as e: + logging.warning(f"Failed to set audio device to '{audio_device}': {e}") + else: + logging.warning(f"sound.setDevice not available, could not set device to '{audio_device}'") else: #change the pref library to PTB and set the latency mode to high precision prefs.hardware['audioLib'] = 'PTB' diff --git a/requirements.txt b/requirements.txt index 25ae1b511..84720c550 100644 --- a/requirements.txt +++ b/requirements.txt @@ -47,8 +47,8 @@ pyobjc>=8.0; sys_platform == 'darwin' #upgrade psychopy to use newer wxpython dependency which is prebuilt for m1 support. # Forked with a fix for Rift stereo projection matrix crash under strict-ndim psychxr. psychopy @ git+https://github.com/pellet/psychopy.git@v2026.2.0-rift-fix -#needed for macos arm sound support: https://github.com/psychopy/psychopy-sounddevice/pull/4 --e psychopy-sounddevice +#needed for macos arm sound support +psychopy-sounddevice @ git+https://github.com/psychopy/psychopy-sounddevice.git ffpyplayer==4.5.2 # 4.5.3 fails to build as wheel. psychtoolbox scikit-learn>=0.23.2 From 9f0a7afa5e9bcde88e201898f8b796e9bc1c6c0f Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 23 Apr 2026 22:14:42 +1000 Subject: [PATCH 53/94] update docs --- doc/getting_started/installation.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/getting_started/installation.rst b/doc/getting_started/installation.rst index c4bcda118..e29352af5 100644 --- a/doc/getting_started/installation.rst +++ b/doc/getting_started/installation.rst @@ -44,7 +44,7 @@ Use the following commands to download the repo, create and activate a conda or **Environment file options** - *Python 3.8 - 3.10:* + *Python 3.10:* - `eeg-expy-full`: Install all dependencies @@ -52,7 +52,7 @@ Use the following commands to download the repo, create and activate a conda or - `eeg-expy-streamstim`: Combined streaming and stimulus presentation - *Python 3.8 - 3.13:* + *Python 3.10 - 3.13:* - `eeg-expy-docsbuild`: Documentation @@ -68,7 +68,7 @@ Use the following commands to download the repo, create and activate a conda or # Create conda environment from chosen eeg-expy-*.yml # The Python version will be pinned by the environment file - conda env create -n eeg-expy --file=environments/eeg-expy-full.yml + conda env create -n eeg-expy -f environments/eeg-expy-full.yml # Activate the environment conda activate eeg-expy From 46decaf7a5ca30fae89ff3604a333b0b2dcc6486 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 23 Apr 2026 22:23:08 +1000 Subject: [PATCH 54/94] fix conda for experimental builds --- environments/eeg-expy-full.yml | 2 +- environments/eeg-expy-stimpres.yml | 2 +- environments/eeg-expy-streamstim.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/environments/eeg-expy-full.yml b/environments/eeg-expy-full.yml index 0cd266bce..9dd39d435 100644 --- a/environments/eeg-expy-full.yml +++ b/environments/eeg-expy-full.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python=3.10 # psychopy 2026.x requires py3.10 + - python>=3.10,<=3.13 # psychopy 2026.x requires py3.10; higher versions for experimental builds - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - numpy # fix PsychXR numpy dependency DLL issues on Windows diff --git a/environments/eeg-expy-stimpres.yml b/environments/eeg-expy-stimpres.yml index 93c7749d8..4a49b62d7 100644 --- a/environments/eeg-expy-stimpres.yml +++ b/environments/eeg-expy-stimpres.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python=3.10 # psychopy 2026.x requires py3.10 + - python>=3.10,<=3.13 # psychopy 2026.x requires py3.10; higher versions for experimental builds - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - wxpython>=4.0 # install wxpython to prevent error on macOS arm64: "site-packages/wx/_core.cpython-38-darwin.so, 0x0002): symbol not found in flat namespace '__ZN10wxBoxSizer20InformFirstDirectionEiii'" diff --git a/environments/eeg-expy-streamstim.yml b/environments/eeg-expy-streamstim.yml index 02bd8be00..4942ff41b 100644 --- a/environments/eeg-expy-streamstim.yml +++ b/environments/eeg-expy-streamstim.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python=3.10 # psychopy <= 3.10 + - python>=3.10,<=3.13 # psychopy <= 3.10; higher versions for experimental builds - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - liblsl # install liblsl to prevent error on macOS and Ubuntu: "RuntimeError: LSL binary library file was not found." From 0780fd2c3796a1dac9b3409bfdd4d5555ae019f7 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 23 Apr 2026 23:04:49 +1000 Subject: [PATCH 55/94] try proper support for newer python versions on CI --- .github/workflows/test.yml | 12 ++++- eegnb/cli/introprompt.py | 3 +- eegnb/cli/utils.py | 66 ++++++++++++++----------- eegnb/experiments/__init__.py | 75 +++++++++++++++++------------ environments/eeg-expy-docsbuild.yml | 2 +- environments/eeg-expy-full.yml | 2 +- environments/eeg-expy-stimpres.yml | 2 +- 7 files changed, 97 insertions(+), 65 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c5e5cbd43..c8a65853b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,15 +21,23 @@ jobs: python_version: ['3.10'] include: # Experimental: PsychoPy not officially supported on 3.11+ + # 3.11 still tries full env to catch regressions early - os: ubuntu-22.04 python_version: '3.11' experimental: true + env_file: environments/eeg-expy-full.yml + env_name: eeg-expy-full + # 3.12+ use streaming env as PsychoPy is definitely not ready - os: ubuntu-22.04 python_version: '3.12' experimental: true + env_file: environments/eeg-expy-streaming.yml + env_name: eeg-expy-streaming - os: ubuntu-22.04 python_version: '3.13' experimental: true + env_file: environments/eeg-expy-streaming.yml + env_name: eeg-expy-streaming steps: - uses: actions/checkout@v2 @@ -40,8 +48,8 @@ jobs: - name: Set up conda env uses: ./.github/actions/setup-conda-env with: - environment-file: environments/eeg-expy-full.yml - activate-environment: eeg-expy-full + environment-file: ${{ matrix.env_file || 'environments/eeg-expy-full.yml' }} + activate-environment: ${{ matrix.env_name || 'eeg-expy-full' }} python-version: ${{ matrix.python_version }} - name: Run eeg-expy install test run: | diff --git a/eegnb/cli/introprompt.py b/eegnb/cli/introprompt.py index ea96b3685..9e16162a0 100644 --- a/eegnb/cli/introprompt.py +++ b/eegnb/cli/introprompt.py @@ -4,7 +4,7 @@ from eegnb import generate_save_fn, DATA_DIR from eegnb.devices.eeg import EEG -from .utils import run_experiment, get_exp_desc, experiments +from .utils import run_experiment, get_exp_desc, get_experiments eegnb_sites = ['eegnb_examples', 'grifflab_dev', 'jadinlab_home'] @@ -87,6 +87,7 @@ def device_prompt() -> EEG: def exp_prompt(runorzip:str='run') -> str: + experiments = get_experiments() print("\nPlease select which experiment you would like to %s: \n" %runorzip) print( "\n".join( diff --git a/eegnb/cli/utils.py b/eegnb/cli/utils.py index fad282cf0..3ce60b055 100644 --- a/eegnb/cli/utils.py +++ b/eegnb/cli/utils.py @@ -1,38 +1,42 @@ -#change the pref libraty to PTB and set the latency mode to high precision -from psychopy import prefs -prefs.hardware['audioLib'] = 'PTB' -prefs.hardware['audioLatencyMode'] = 3 +try: + #change the pref libraty to PTB and set the latency mode to high precision + from psychopy import prefs + prefs.hardware['audioLib'] = 'PTB' + prefs.hardware['audioLatencyMode'] = 3 +except ImportError: + pass from eegnb.devices.eeg import EEG - -from eegnb.experiments import VisualN170, Experiment -from eegnb.experiments import VisualP300 -from eegnb.experiments import VisualSSVEP -from eegnb.experiments import AuditoryOddball -from eegnb.experiments.visual_cueing import cueing -from eegnb.experiments.visual_codeprose import codeprose -from eegnb.experiments.auditory_oddball import diaconescu -from eegnb.experiments.auditory_ssaep import ssaep, ssaep_onefreq from typing import Optional +def get_experiments(): + from eegnb.experiments import VisualN170, Experiment + from eegnb.experiments import VisualP300 + from eegnb.experiments import VisualSSVEP + from eegnb.experiments import AuditoryOddball + from eegnb.experiments.visual_cueing import cueing + from eegnb.experiments.visual_codeprose import codeprose + from eegnb.experiments.auditory_oddball import diaconescu + from eegnb.experiments.auditory_ssaep import ssaep, ssaep_onefreq -# New Experiment Class structure has a different initilization, to be noted -experiments = { - "visual-N170": VisualN170(), - "visual-P300": VisualP300(), - "visual-SSVEP": VisualSSVEP(), - "visual-cue": cueing, - "visual-codeprose": codeprose, - "auditory-SSAEP orig": ssaep, - "auditory-SSAEP onefreq": ssaep_onefreq, - "auditory-oddball orig": AuditoryOddball(), - "auditory-oddball diaconescu": diaconescu, -} + # New Experiment Class structure has a different initilization, to be noted + return { + "visual-N170": VisualN170, + "visual-P300": VisualP300, + "visual-SSVEP": VisualSSVEP, + "visual-cue": cueing, + "visual-codeprose": codeprose, + "auditory-SSAEP orig": ssaep, + "auditory-SSAEP onefreq": ssaep_onefreq, + "auditory-oddball orig": AuditoryOddball, + "auditory-oddball diaconescu": diaconescu, + } def get_exp_desc(exp: str): + experiments = get_experiments() if exp in experiments: module = experiments[exp] if hasattr(module, "__title__"): @@ -43,17 +47,23 @@ def get_exp_desc(exp: str): def run_experiment( experiment: str, eeg_device: EEG, record_duration: Optional[float] = None, save_fn=None ): + experiments = get_experiments() if experiment in experiments: - module = experiments[experiment] + exp_item = experiments[experiment] + + from eegnb.experiments import Experiment # Condition added for different run types of old and new experiment class structure - if isinstance(module, Experiment.BaseExperiment): + # If it's a class (BaseExperiment subclass), instantiate it + if isinstance(exp_item, type) and issubclass(exp_item, Experiment.BaseExperiment): + module = exp_item() module.duration = record_duration module.eeg = eeg_device module.save_fn = save_fn module.run() else: - module.present(duration=record_duration, eeg=eeg_device, save_fn=save_fn) # type: ignore + # Otherwise it's an old-style module + exp_item.present(duration=record_duration, eeg=eeg_device, save_fn=save_fn) # type: ignore else: print("\nError: Unknown experiment '{}'".format(experiment)) print("\nExperiment can be one of:") diff --git a/eegnb/experiments/__init__.py b/eegnb/experiments/__init__.py index 824871302..2c1aaff44 100644 --- a/eegnb/experiments/__init__.py +++ b/eegnb/experiments/__init__.py @@ -1,35 +1,48 @@ -from .visual_n170.n170 import VisualN170 -from .visual_p300.p300 import VisualP300 -from .visual_ssvep.ssvep import VisualSSVEP +try: + from .visual_n170.n170 import VisualN170 + from .visual_p300.p300 import VisualP300 + from .visual_ssvep.ssvep import VisualSSVEP +except ImportError: + VisualN170 = None # type: ignore + VisualP300 = None # type: ignore + VisualSSVEP = None # type: ignore -from psychopy import sound, plugins, prefs -import platform -import logging +try: + from psychopy import sound, plugins, prefs + import platform + import logging -# PTB does not yet support macOS Apple Silicon freely, need to fall back to sounddevice. -if platform.system() == 'Darwin' and platform.machine() == 'arm64': - # import psychopy_sounddevice.backend_sounddevice - plugins.scanPlugins() - success = plugins.loadPlugin('psychopy-sounddevice') - print(f"psychopy_sounddevice plugin loaded: {success}") + # PTB does not yet support macOS Apple Silicon freely, need to fall back to sounddevice. + if platform.system() == 'Darwin' and platform.machine() == 'arm64': + # import psychopy_sounddevice.backend_sounddevice + plugins.scanPlugins() + success = plugins.loadPlugin('psychopy-sounddevice') + print(f"psychopy_sounddevice plugin loaded: {success}") - # Force reload sound module - import importlib - importlib.reload(sound) - - # Try to set the audio device if requested and available - audio_device = prefs.hardware.get('audioDevice', 'default') - if audio_device and audio_device != 'default': - if hasattr(sound, 'setDevice'): - try: - sound.setDevice(audio_device) - except Exception as e: - logging.warning(f"Failed to set audio device to '{audio_device}': {e}") - else: - logging.warning(f"sound.setDevice not available, could not set device to '{audio_device}'") -else: - #change the pref library to PTB and set the latency mode to high precision - prefs.hardware['audioLib'] = 'PTB' - prefs.hardware['audioLatencyMode'] = 3 + # Force reload sound module + import importlib + importlib.reload(sound) + + # Try to set the audio device if requested and available + audio_device = prefs.hardware.get('audioDevice', 'default') + if audio_device and audio_device != 'default': + if hasattr(sound, 'setDevice'): + try: + sound.setDevice(audio_device) + except Exception as e: + logging.warning(f"Failed to set audio device to '{audio_device}': {e}") + else: + logging.warning(f"sound.setDevice not available, could not set device to '{audio_device}'") + else: + #change the pref library to PTB and set the latency mode to high precision + prefs.hardware['audioLib'] = 'PTB' + prefs.hardware['audioLatencyMode'] = 3 +except ImportError: + import logging + # logging.warning("PsychoPy not found. Stimulus presentation experiments will not be available.") + pass -from .auditory_oddball.aob import AuditoryOddball \ No newline at end of file +try: + from .auditory_oddball.aob import AuditoryOddball +except ImportError: + AuditoryOddball = None # type: ignore diff --git a/environments/eeg-expy-docsbuild.yml b/environments/eeg-expy-docsbuild.yml index b896f363d..f79e1711a 100644 --- a/environments/eeg-expy-docsbuild.yml +++ b/environments/eeg-expy-docsbuild.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.10,<=3.13 + - python>=3.10 - setuptools - pytables # install pytables for macOS arm64, so do not need to build from source. - rust # used by docsbuild diff --git a/environments/eeg-expy-full.yml b/environments/eeg-expy-full.yml index 9dd39d435..2e096c6dc 100644 --- a/environments/eeg-expy-full.yml +++ b/environments/eeg-expy-full.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.10,<=3.13 # psychopy 2026.x requires py3.10; higher versions for experimental builds + - python>=3.10,<=3.11 # psychopy 2026.x requires py3.10; higher versions for experimental builds - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - numpy # fix PsychXR numpy dependency DLL issues on Windows diff --git a/environments/eeg-expy-stimpres.yml b/environments/eeg-expy-stimpres.yml index 4a49b62d7..dd6e36096 100644 --- a/environments/eeg-expy-stimpres.yml +++ b/environments/eeg-expy-stimpres.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.10,<=3.13 # psychopy 2026.x requires py3.10; higher versions for experimental builds + - python >=3.10 # psychopy 2026.x requires py3.10; higher versions allowed for experimental builds - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - wxpython>=4.0 # install wxpython to prevent error on macOS arm64: "site-packages/wx/_core.cpython-38-darwin.so, 0x0002): symbol not found in flat namespace '__ZN10wxBoxSizer20InformFirstDirectionEiii'" From aee10c018b76898be71520d2a0b0152833c78c39 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Fri, 24 Apr 2026 19:20:12 +1000 Subject: [PATCH 56/94] add the tests to the streaming section for ci. --- environments/eeg-expy-docsbuild.yml | 2 +- environments/eeg-expy-streaming.yml | 2 +- requirements.txt | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/environments/eeg-expy-docsbuild.yml b/environments/eeg-expy-docsbuild.yml index f79e1711a..b699bbb17 100644 --- a/environments/eeg-expy-docsbuild.yml +++ b/environments/eeg-expy-docsbuild.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.10 + - python >=3.10 # higher versions allowed for experimental builds - setuptools - pytables # install pytables for macOS arm64, so do not need to build from source. - rust # used by docsbuild diff --git a/environments/eeg-expy-streaming.yml b/environments/eeg-expy-streaming.yml index 0e24d3cee..800ab4cc6 100644 --- a/environments/eeg-expy-streaming.yml +++ b/environments/eeg-expy-streaming.yml @@ -3,7 +3,7 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.10,<=3.13 + - python >=3.10 # higher versions allowed for experimental builds - setuptools - liblsl # install liblsl to prevent error on macOS and Ubuntu: "RuntimeError: LSL binary library file was not found." - pip diff --git a/requirements.txt b/requirements.txt index 84720c550..c5cf6db4a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -40,6 +40,11 @@ attrdict>=2.0.1 attrdict3 click +# Tests +pytest +pytest-cov +nbval + ## ~~ Stimpres Requirements ~~ From a5a2c1f4c7866a1b5d71946bfede827f95d0c581 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Fri, 24 Apr 2026 21:01:06 +1000 Subject: [PATCH 57/94] try having builds work for streaming environment --- .github/workflows/test.yml | 27 +++++++++---- eegnb/devices/{meta_quest.py => vr.py} | 14 +++---- eegnb/experiments/Experiment.py | 26 ++++++------ tests/test_acquisition.py | 56 ++++++++++++++++++++++++++ 4 files changed, 94 insertions(+), 29 deletions(-) rename eegnb/devices/{meta_quest.py => vr.py} (91%) create mode 100644 tests/test_acquisition.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c8a65853b..ca22dc04e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -17,17 +17,19 @@ jobs: strategy: fail-fast: false matrix: - os: ['ubuntu-22.04', windows-latest, macOS-latest] + os: [ubuntu-22.04, windows-latest, macOS-latest] python_version: ['3.10'] + env_file: [environments/eeg-expy-full.yml] + env_name: [eeg-expy-full] include: - # Experimental: PsychoPy not officially supported on 3.11+ - # 3.11 still tries full env to catch regressions early + # Experimental Full Build: Catch regressions on 3.11 early - os: ubuntu-22.04 python_version: '3.11' experimental: true env_file: environments/eeg-expy-full.yml env_name: eeg-expy-full - # 3.12+ use streaming env as PsychoPy is definitely not ready + + # Experimental Streaming Builds: Verify acquisition/analysis on 3.12+ - os: ubuntu-22.04 python_version: '3.12' experimental: true @@ -48,8 +50,8 @@ jobs: - name: Set up conda env uses: ./.github/actions/setup-conda-env with: - environment-file: ${{ matrix.env_file || 'environments/eeg-expy-full.yml' }} - activate-environment: ${{ matrix.env_name || 'eeg-expy-full' }} + environment-file: ${{ matrix.env_file }} + activate-environment: ${{ matrix.env_name }} python-version: ${{ matrix.python_version }} - name: Run eeg-expy install test run: | @@ -65,7 +67,16 @@ jobs: Xvfb :0 -screen 0 1024x768x24 -ac +extension GLX +render -noreset &> xvfb.log & export DISPLAY=:0 fi - make test PYTEST_ARGS="--ignore=tests/test_run_experiments.py" + + # Set default pytest args + ARGS="--ignore=tests/test_run_experiments.py" + + # If in streaming environment, ignore experiments and VR hardware modules + if [[ "${{ matrix.env_name }}" == "eeg-expy-streaming" ]]; then + ARGS="$ARGS --ignore=eegnb/experiments --ignore=eegnb/devices/vr.py" + fi + + make test PYTEST_ARGS="$ARGS" typecheck: @@ -78,7 +89,7 @@ jobs: fail-fast: false matrix: os: ['ubuntu-22.04'] - python_version: [3.10] + python_version: ['3.10'] steps: - uses: actions/checkout@v2 diff --git a/eegnb/devices/meta_quest.py b/eegnb/devices/vr.py similarity index 91% rename from eegnb/devices/meta_quest.py rename to eegnb/devices/vr.py index dcbe519fa..2449b2226 100644 --- a/eegnb/devices/meta_quest.py +++ b/eegnb/devices/vr.py @@ -3,9 +3,9 @@ from time import time from psychopy.visual.rift import Rift -class MetaQuest(Rift): +class VR(Rift): """ - Extended Rift class for Meta Quest HMDs, providing built-in methods for + Extended VR class for HMDs, providing built-in methods for stereoscopic rendering math, precise hardware clock synchronization, and per-trial compositor telemetry buffering. """ @@ -28,7 +28,7 @@ def compute_optical_axis_offsets(self): return ((left_L - left_R) / (left_L + left_R), (right_L - right_R) / (right_L + right_R)) except Exception as e: - logging.warning(f"[MetaQuest] Failed to compute optical axis offsets: {e}") + logging.warning(f"[VR] Failed to compute optical axis offsets: {e}") return (0.0, 0.0) def sync_vr_clock(self): @@ -55,14 +55,14 @@ def sync_vr_clock(self): best_offset = offset logging.info( - f"[MetaQuest] clock offset (wall - libovr) = " + f"[VR] clock offset (wall - libovr) = " f"{best_offset:.6f}s (tightest bracket = {best_bracket*1e3:.3f}ms)" ) self.libovr_to_wallclock_offset = best_offset return best_offset except Exception as e: - logging.warning(f"[MetaQuest] LibOVR clock sync failed: {e}") + logging.warning(f"[VR] LibOVR clock sync failed: {e}") return None def log_display_info(self): @@ -81,7 +81,7 @@ def log_display_info(self): ipd_mm = (eye_to_nose[0] + eye_to_nose[1]) * 1000.0 logging.info( - f"[MetaQuest] IPD={ipd_mm:.1f}mm ppd={ppd} (h={ppd_h:.1f} v={ppd_v:.1f}) " + f"[VR] IPD={ipd_mm:.1f}mm ppd={ppd} (h={ppd_h:.1f} v={ppd_v:.1f}) " f"res={self.displayResolution} eye_buf={self.size}" ) @@ -91,7 +91,7 @@ def log_display_info(self): return ppd, ipd_mm except Exception as e: - logging.warning(f"[MetaQuest] Failed to read display info: {e}") + logging.warning(f"[VR] Failed to read display info: {e}") return None, None def log_telemetry(self, trial_idx, software_time): diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index eff7fad9e..ead39fd92 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -11,8 +11,8 @@ from abc import abstractmethod, ABC from typing import Callable from eegnb.devices.eeg import EEG -from eegnb.devices.meta_quest import MetaQuest as Rift -from psychopy import prefs +from eegnb.devices.vr import VR +from psychopy import prefs, visual, event, core import gc from time import time @@ -21,7 +21,6 @@ import numpy as np from pandas import DataFrame -from psychopy import visual, event, core from eegnb import generate_save_fn @@ -63,14 +62,14 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, self.stereoscopic = stereoscopic if use_vr: # VR interface accessible by specific experiment classes for customizing and using controllers. - # OculusRift extends psychopy's Rift with clock sync, per-trial telemetry buffering, and telemetry CSV saving. - self.rift: Rift = Rift(monoscopic=not stereoscopic, headLocked=True) + # VR extends psychopy's VR with clock sync, per-trial telemetry buffering, and telemetry CSV saving. + self.vr: VR = VR(monoscopic=not stereoscopic, headLocked=True) # Shift content onto each lens's optical axis. VR HMDs use canted # asymmetric frustums, so NDC (0,0) is off-axis and binocular content # there forces inward vergence ("cross-eyed" feel). if use_vr and stereoscopic: - self.left_eye_x_pos, self.right_eye_x_pos = self.rift.compute_optical_axis_offsets() + self.left_eye_x_pos, self.right_eye_x_pos = self.vr.compute_optical_axis_offsets() else: self.left_eye_x_pos = 0 self.right_eye_x_pos = 0 @@ -139,7 +138,7 @@ def present_soa(self, idx: int): def setup(self, instructions=True): # Setting up Graphics self.window = ( - self.rift if self.use_vr + self.vr if self.use_vr else visual.Window(self.window_size, monitor="testMonitor", units="deg", screen = self.screen_num, fullscr=self.use_fullscr)) @@ -239,13 +238,13 @@ def get_vr_input(self, vr_controller, button=None, trigger=False): """ trigger_squeezed = False if trigger: - for x in self.rift.getIndexTriggerValues(vr_controller): + for x in self.vr.getIndexTriggerValues(vr_controller): if x > 0.0: trigger_squeezed = True button_pressed = False if button is not None: - button_pressed, tsec = self.rift.getButtons([button], vr_controller, 'released') + button_pressed, tsec = self.vr.getButtons([button], vr_controller, 'released') if trigger_squeezed or button_pressed: return True @@ -283,7 +282,7 @@ def clear_vr_input(self): Clears/resets input events from vr controllers """ if self.use_vr: - self.rift.updateInputState() + self.vr.updateInputState() def _run_trial_loop(self, start_time, duration): """ @@ -406,7 +405,7 @@ def run(self, instructions=True): gc.disable() try: if self.use_vr: - self.rift.sync_vr_clock() + self.vr.sync_vr_clock() self._run_trial_loop(record_start_time, self.duration) finally: gc.enable() @@ -422,7 +421,7 @@ def run(self, instructions=True): self.eeg.stop() if self.use_vr: - self.rift.save_telemetry(self.save_fn) + self.vr.save_telemetry(self.save_fn) # Closing the window self.window.close() @@ -440,7 +439,7 @@ def push_vr_marker(self, marker, trial_idx): return if self.use_vr: - self.rift.log_telemetry(trial_idx, software_time) + self.vr.log_telemetry(trial_idx, software_time) def send_triggers(self, marker): """Send timing triggers to recording device[s]""" @@ -452,4 +451,3 @@ def send_triggers(self, marker): def name(self) -> str: """ This experiment's name """ return self.exp_name - diff --git a/tests/test_acquisition.py b/tests/test_acquisition.py new file mode 100644 index 000000000..9eaec5ff3 --- /dev/null +++ b/tests/test_acquisition.py @@ -0,0 +1,56 @@ +import os +import time +import pandas as pd +import pytest +from eegnb.devices.eeg import EEG + +def test_synthetic_acquisition(tmp_path): + """ + Test the data acquisition pipeline using a synthetic BrainFlow board. + This verifies that we can initialize a device, start a stream, + record data, and save it to a CSV file in a CI-friendly way. + """ + # Use a temporary file for recording + save_fn = tmp_path / "synthetic_data.csv" + + # Initialize EEG with synthetic board + # BrainFlow synthetic board (ID -1) works without hardware + eeg = EEG(device='synthetic') + + # Verify metadata initialization + assert eeg.backend == 'brainflow' + assert eeg.sfreq == 250 # Default for synthetic board + assert len(eeg.channels) > 0 + + # Start stream and capture data + # We specify a short duration for the test + record_duration = 2 + eeg.start(str(save_fn), duration=record_duration + 5) + + # Simulate some experiment time + time.sleep(record_duration) + + # Push a few synthetic markers + eeg.push_sample(marker=1) + time.sleep(0.1) + eeg.push_sample(marker=2) + + # Stop recording and release session + eeg.stop() + + # Verify file creation and content + assert save_fn.exists() + + # Read the data back + data = pd.read_csv(save_fn) + + # Basic data validation + assert len(data) > 0 + assert 'timestamps' in data.columns + assert 'stim' in data.columns + + # Check if markers were recorded (may vary slightly based on timing) + # but we should at least see non-zero values in the stim column + assert (data['stim'] != 0).any() + + print(f"Acquired {len(data)} samples with columns: {list(data.columns)}") From faccd570eb46d7abd29059b2f93a4ba197647ad9 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Fri, 24 Apr 2026 22:03:56 +1000 Subject: [PATCH 58/94] build fix ups --- .github/workflows/test.yml | 11 +--------- conftest.py | 19 +++++++++++++++++ eegnb/cli/utils.py | 3 ++- eegnb/experiments/BlockExperiment.py | 4 ++-- eegnb/experiments/Experiment.py | 6 ++++++ .../visual_vep/pattern_reversal_vep.py | 21 +++++++++++-------- pyproject.toml | 1 + 7 files changed, 43 insertions(+), 22 deletions(-) create mode 100644 conftest.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ca22dc04e..6afc1f6ee 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -67,16 +67,7 @@ jobs: Xvfb :0 -screen 0 1024x768x24 -ac +extension GLX +render -noreset &> xvfb.log & export DISPLAY=:0 fi - - # Set default pytest args - ARGS="--ignore=tests/test_run_experiments.py" - - # If in streaming environment, ignore experiments and VR hardware modules - if [[ "${{ matrix.env_name }}" == "eeg-expy-streaming" ]]; then - ARGS="$ARGS --ignore=eegnb/experiments --ignore=eegnb/devices/vr.py" - fi - - make test PYTEST_ARGS="$ARGS" + make test typecheck: diff --git a/conftest.py b/conftest.py new file mode 100644 index 000000000..649b2f0ef --- /dev/null +++ b/conftest.py @@ -0,0 +1,19 @@ +import importlib.util + + +def _is_available(module_name: str) -> bool: + try: + return importlib.util.find_spec(module_name) is not None + except (ImportError, ValueError): + return False + + +collect_ignore: list[str] = [] + +if not _is_available("psychopy"): + collect_ignore += [ + "eegnb/experiments", + "eegnb/devices/vr.py", + ] +elif not _is_available("psychxr"): + collect_ignore += ["eegnb/devices/vr.py"] diff --git a/eegnb/cli/utils.py b/eegnb/cli/utils.py index 3ce60b055..b7191bf29 100644 --- a/eegnb/cli/utils.py +++ b/eegnb/cli/utils.py @@ -56,7 +56,8 @@ def run_experiment( # Condition added for different run types of old and new experiment class structure # If it's a class (BaseExperiment subclass), instantiate it if isinstance(exp_item, type) and issubclass(exp_item, Experiment.BaseExperiment): - module = exp_item() + # Concrete subclasses supply defaults for BaseExperiment's required args; mypy can't see which subclass. + module = exp_item() # type: ignore[call-arg] module.duration = record_duration module.eeg = eeg_device module.save_fn = save_fn diff --git a/eegnb/experiments/BlockExperiment.py b/eegnb/experiments/BlockExperiment.py index 4cb02e8a0..a728a21a5 100644 --- a/eegnb/experiments/BlockExperiment.py +++ b/eegnb/experiments/BlockExperiment.py @@ -131,7 +131,7 @@ def run(self, instructions=True): gc.disable() try: if self.use_vr: - self.rift.sync_vr_clock() + self.vr.sync_vr_clock() if not self._run_trial_loop(start_time=time(), duration=self.block_duration): break finally: @@ -145,7 +145,7 @@ def run(self, instructions=True): self.eeg.stop() if self.use_vr: - self.rift.save_telemetry(self.save_fn) + self.vr.save_telemetry(self.save_fn) # Close window at the end of all blocks self.window.close() diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index ead39fd92..af9c5f949 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -366,14 +366,20 @@ def _report_frame_stats(self): mean_ms = np.mean(intervals_ms) std_ms = np.std(intervals_ms) max_ms = max(intervals_ms) + refresh_rate_hz = int(np.round( + self.window.displayRefreshRate if self.use_vr + else (self.window.getActualFrameRate() or 0) + )) print(f"\nFrame timing: {total} frames, {dropped} dropped ({dropped/total*100:.1f}%)") + print(f" Refresh rate: {refresh_rate_hz} Hz") print(f" Mean: {mean_ms:.2f}ms Std: {std_ms:.2f}ms Max: {max_ms:.2f}ms") if self.save_fn: stats_path = self.save_fn.with_name(self.save_fn.stem + '_frame_stats.json') with open(stats_path, 'w') as f: json.dump({ + 'display_refresh_rate_hz': refresh_rate_hz, 'total_frames': total, 'dropped_frames': dropped, 'mean_ms': round(mean_ms, 3), diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index b0c98fa6f..62f109b1d 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -18,10 +18,9 @@ class VisualPatternReversalVEP(BlockExperiment): - def __init__(self, display_refresh_rate: int, eeg: Optional[EEG] = None, save_fn=None, + def __init__(self, eeg: Optional[EEG] = None, save_fn=None, block_duration_seconds=50, block_trial_size: int=100, n_blocks: int=8, use_vr=False, use_fullscr=True): - self.display_refresh_rate = display_refresh_rate soa=0.5 iti=0 jitter=0 @@ -60,16 +59,20 @@ def create_checkerboard(intensity_checks, field_deg=ISCEV_FIELD_DEG, ) def load_stimulus(self) -> Dict[str, Any]: - # Frame rate, in Hz # TODO: Fix - Rift.GetActualFrameRate() crashes in psychxr due to 'EndFrame called before BeginFrame' - actual_frame_rate = np.round(self.window.displayRefreshRate if self.use_vr else self.window.getActualFrameRate()) - - # Ensure the expected frame rate matches and is divisable by the stimulus rate(soa) - assert actual_frame_rate % self.soa == 0, f"Expected frame rate divisable by stimulus rate: {self.soa}, but got {actual_frame_rate} Hz" - assert abs(self.display_refresh_rate - actual_frame_rate) <= self.display_refresh_rate * 0.05, f"Expected frame rate {self.display_refresh_rate} Hz, but got {actual_frame_rate} Hz" + self.display_refresh_rate = int(np.round( + self.window.displayRefreshRate if self.use_vr else self.window.getActualFrameRate() + )) + + # Integer frames per reversal cycle required so each half-cycle has the same duration. + reversals_per_sec = 1 / self.soa + assert self.display_refresh_rate % reversals_per_sec == 0, ( + f"Frame rate {self.display_refresh_rate} Hz must be an integer multiple of " + f"the stimulus reversal rate {reversals_per_sec} Hz" + ) if self.use_vr: - ppd, ipd_mm = self.rift.log_display_info() + ppd, ipd_mm = self.vr.log_display_info() logging.info(f"[PRVEP-HMD] optical_axis_ndc=L{self.left_eye_x_pos:+.3f}/R{self.right_eye_x_pos:+.3f}") # 1 texel = 1 buffer pixel diff --git a/pyproject.toml b/pyproject.toml index de7bf0dc5..e9fb602e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,7 @@ addopts = """ --current-env --ignore-glob 'examples/**.py' --ignore-glob '**/baseline_task.py' + --ignore 'tests/test_run_experiments.py' """ testpaths = [ "eegnb", From 6cbf19041d688469abf6dcf4513cb17269a8a487 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Fri, 24 Apr 2026 22:14:37 +1000 Subject: [PATCH 59/94] clean up refresh rate detection --- eegnb/experiments/Experiment.py | 13 +++++-------- .../experiments/visual_vep/pattern_reversal_vep.py | 8 +++----- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index af9c5f949..18b0d5052 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -349,9 +349,10 @@ def iti_with_jitter(): def _enable_frame_tracking(self): """Enable per-frame interval recording for dropped frame diagnostics.""" self.window.recordFrameIntervals = True + rate = self.window.displayRefreshRate if self.use_vr else self.window.getActualFrameRate() + self.display_refresh_rate = int(np.round(rate)) if rate else None # Threshold for counting a frame as "dropped" — 50% over expected duration - expected_frame_dur = 1.0 / (self.window.displayRefreshRate if self.use_vr - else (self.window.getActualFrameRate() or 60)) + expected_frame_dur = 1.0 / (rate or 60) self.window.refreshThreshold = expected_frame_dur * 1.5 def _report_frame_stats(self): @@ -366,20 +367,16 @@ def _report_frame_stats(self): mean_ms = np.mean(intervals_ms) std_ms = np.std(intervals_ms) max_ms = max(intervals_ms) - refresh_rate_hz = int(np.round( - self.window.displayRefreshRate if self.use_vr - else (self.window.getActualFrameRate() or 0) - )) print(f"\nFrame timing: {total} frames, {dropped} dropped ({dropped/total*100:.1f}%)") - print(f" Refresh rate: {refresh_rate_hz} Hz") + print(f" Refresh rate: {self.display_refresh_rate} Hz") print(f" Mean: {mean_ms:.2f}ms Std: {std_ms:.2f}ms Max: {max_ms:.2f}ms") if self.save_fn: stats_path = self.save_fn.with_name(self.save_fn.stem + '_frame_stats.json') with open(stats_path, 'w') as f: json.dump({ - 'display_refresh_rate_hz': refresh_rate_hz, + 'display_refresh_rate_hz': self.display_refresh_rate, 'total_frames': total, 'dropped_frames': dropped, 'mean_ms': round(mean_ms, 3), diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index 62f109b1d..22a2d292f 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -1,5 +1,3 @@ -from time import time -import csv import logging import numpy as np @@ -60,14 +58,14 @@ def create_checkerboard(intensity_checks, field_deg=ISCEV_FIELD_DEG, def load_stimulus(self) -> Dict[str, Any]: # TODO: Fix - Rift.GetActualFrameRate() crashes in psychxr due to 'EndFrame called before BeginFrame' - self.display_refresh_rate = int(np.round( + refresh_rate = int(np.round( self.window.displayRefreshRate if self.use_vr else self.window.getActualFrameRate() )) # Integer frames per reversal cycle required so each half-cycle has the same duration. reversals_per_sec = 1 / self.soa - assert self.display_refresh_rate % reversals_per_sec == 0, ( - f"Frame rate {self.display_refresh_rate} Hz must be an integer multiple of " + assert refresh_rate % reversals_per_sec == 0, ( + f"Frame rate {refresh_rate} Hz must be an integer multiple of " f"the stimulus reversal rate {reversals_per_sec} Hz" ) From ed00eb67fbeb9fa4e8d2d23062b22493397e101a Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Fri, 24 Apr 2026 22:22:15 +1000 Subject: [PATCH 60/94] fix example --- examples/visual_vep/00x__pattern_reversal_run_experiment.py | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index d6a4afa77..e54347022 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -98,7 +98,6 @@ # at each block instruction prompt to begin that block. pattern_reversal_vep = VisualPatternReversalVEP( - display_refresh_rate=refresh_rate, eeg=eeg_device, save_fn=save_fn, use_vr=use_vr From b8de4d2d61ee0ff12acebcf197f46d731b730b70 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 27 Apr 2026 15:17:34 +1000 Subject: [PATCH 61/94] doc update --- doc/experiments/vprvep.rst | 341 +++++++++++++++++++++---------- doc/getting_started/streaming.md | 3 + eegnb/analysis/vep_utils.py | 3 + 3 files changed, 242 insertions(+), 105 deletions(-) diff --git a/doc/experiments/vprvep.rst b/doc/experiments/vprvep.rst index 9b6da21d9..fe309f475 100644 --- a/doc/experiments/vprvep.rst +++ b/doc/experiments/vprvep.rst @@ -1,26 +1,24 @@ -******************************** -_ -********************************* - Visual Pattern Reversal VEP =========================== The Pattern Reversal VEP (PR-VEP) is the most widely studied visual evoked potential paradigm. A checkerboard pattern swaps its black and white squares at a regular rate (typically 2 reversals per second) while -the participant fixates a central dot. Each reversal elicits a -stereotyped waveform whose most prominent feature is the **P100**, a -positive deflection occurring ~100ms after the reversal at midline -occipital electrodes. The other components are a small N75 before it -and an N145 after it. - -In this notebook, we will attempt to detect the P100 with the OpenBCI -Cyton, with the most critical electrode at Oz, followed by O1 and O2, -then POz. Fp1 and Fp2 are optional channels for detecting eye movement -artefacts. We use monocular pattern reversal blocks and run the analysis -pipeline to pull out the per-eye P100 latency and the interocular -latency difference. - +the participant fixates on a central cross. Each reversal elicits a +stereotyped triphasic waveform whose most prominent feature is the +**P100**, a positive deflection occurring ~100 ms after the reversal at +midline occipital electrodes. The other components are a smaller N75 +before it and an N145 after it. + +This implementation runs both ISCEV check-size variants in a single +session (large + small) and supports stereoscopic monocular presentation +through a Meta Quest HMD via PsychoPy / psychxr / Meta-Link. Trials are +analysed under two reference schemes (Oz−Fz ISCEV-standard and linked +mastoid M1+M2) and a wide range of differential biomarkers are reported, +including inter-ocular latency difference (IOLD), check-size slope +difference, hemispheric asymmetry, inter-ocular Δ-asymmetry contrasts, +lateral extrastriate readouts at P7/P8, and bootstrap confidence +intervals on the P100 latency. **PR-VEP Experiment Notebook Examples:** @@ -37,13 +35,20 @@ Running the Experiment eeg = EEG(device='cyton') experiment = VisualPatternReversalVEP( - display_refresh_rate=120, # must match display and be divisible by 2; higher rates give better latency precision eeg=eeg, save_fn='my_vep_recording.csv', - use_vr=True, # False for monitor mode + block_duration_seconds=50, + block_trial_size=100, + reps_per_condition=2, # 4 conditions × 2 reps = 8 blocks total + use_vr=True, # False for monitor mode ) experiment.run() +The display refresh rate is auto-detected from the active window +(``displayRefreshRate`` in VR, ``getActualFrameRate()`` on a monitor) and +must be an integer multiple of the 2 reversals/sec rate; 60, 90, 120, and +144 Hz are all supported. + Participant Preparation ----------------------- @@ -54,7 +59,8 @@ their corrective lenses during the test. Uncorrected refractive error blurs the checkerboard's high spatial frequency edges, which attenuates the P100 amplitude and can increase its latency — mimicking a genuine neural conduction delay. This is especially important when comparing -latencies between eyes or across sessions. +latencies between eyes or across sessions, and even more so for the +small-check (high spatial-frequency) variant where blur dominates. ISCEV guidelines require that visual acuity be documented for each recording session. If a participant's corrected acuity is worse than @@ -65,27 +71,42 @@ account for it. Stimulus Parameters ------------------- -Parameters follow the ISCEV "large check" option [Odom2016]_: - -- **Check size**: 1° of visual angle (0.5 cpd) -- **Reversal rate**: 2 reversals per second (one reversal per two display frames) -- **Field size**: 16° (monitor) / 20° (VR) -- **Contrast**: High contrast black/white, mean luminance held constant -- **Fixation**: Central red dot -- **Recording**: Monocular, alternating left and right eye per block - -Eight blocks of 50 seconds by default, giving ~100 reversals per eye per -block (400 per eye total). - -The experiment requires a display refresh rate that is divisible by two, -since each reversal occupies exactly two frames. Any such refresh rate is -supported — 60 Hz, 90 Hz, 120 Hz, 144 Hz, etc. A higher refresh rate -reduces the temporal jitter between the true reversal onset and the -nearest frame boundary, which directly translates to more precise P100 -latency estimates. For example, at 60 Hz each frame is ~16.7 ms wide, -whereas at 120 Hz it is ~8.3 ms — halving the worst-case timing error. -VR headsets running at 90 Hz or above are therefore preferred over a -standard 60 Hz monitor when absolute latency precision matters. +Two ISCEV check-size variants are presented per session [Odom2016]_: + +- **Large checks**: 1.0° of visual angle (60 arcmin, 0.5 cpd) — the + standard clinical PR-VEP stimulus, dominant low-spatial-frequency + drive of the foveal P100. +- **Small checks**: 0.25° of visual angle (15 arcmin, 2.0 cpd) — the + high-spatial-frequency variant. Demyelinated optic-nerve fibres + preferentially delay this response, so the latency *difference* + between large- and small-check P100 amplifies subtle demyelination + that the large-check IOLD alone misses. + +Other parameters: + +- **Reversal rate**: 2 reversals per second (ISCEV standard, range + 1–3 rev/s) [Odom2016]_ — fast enough for a discrete transient P100, + slow enough to stay well below photosensitive-seizure trigger + frequencies. +- **Field size**: 16° square (``ISCEV_FIELD_DEG = 16.0``), rendered at + the runtime-derived pixels-per-degree of the active display. +- **Contrast**: high-contrast black/white, mean luminance held constant + through the inter-trial interval to avoid adaptation. +- **Fixation**: thin red cross, 0.25° × 0.05° (15 × 3 arcmin), sized in + pixels via ``ppd`` so it stays sub-check at every variant and does not + mask foveal stimulation. + +Block scheduling: 4 conditions (left/right eye × large/small check) × +``reps_per_condition`` repetitions, shuffled at construction time. With +the default ``reps_per_condition=2`` this gives 8 blocks of 50 s, ~100 +reversals per block, ~200 reversals per (eye × size) condition, and +~400 reversals per eye total. + +Block-start markers (100, 101, 102, 103) are pushed at the first +reversal of each block, encoding the full condition (bit 0 = eye, bit 1 += size class). Per-reversal markers are ``1`` for left-eye blocks and +``2`` for right-eye blocks. Both decode to the per-condition labels in +the analysis pipeline. Monitor vs VR @@ -94,39 +115,143 @@ Monitor vs VR The experiment supports both standard monitor presentation and Meta Quest (VR) presentation via ``use_vr=True``. -**VR mode is preferred** for two reasons: - -- Each eye sees the checkerboard independently, so there is no manual - eye closure and no light leakage. -- The OpenXR compositor supplies a per-frame predicted photon time - (``tracking_state.headPose.timeInSeconds``), which is attached to the EEG - marker in place of ``time.time()``. This cancels most of the - output-side display latency — render queue, compositor buffering, - scan-out, HMD persistence — on a per-frame basis, which matters for - P100 latency where even small shifts are clinically meaningful. - -In monitor mode the software marker is the only timing source, so any -fixed display-pipeline latency has to be handled separately (see below). -A proof-of-concept photodiode sync patch is drawn in the bottom-left -corner of the window in monitor mode — a 50px square whose polarity -flips with each reversal. Taping a photodiode over that square and -routing its TTL into a spare channel would give hardware timing ground -truth; the code is in place but the hardware path is a work in progress — -instructions for wiring a photodiode to a Cyton digital input pin will -be added in a future update. +**VR mode is preferred** for several reasons: + +- Each eye sees the checkerboard independently via per-eye HMD buffers, + so monocular blocks need no manual eye closure and have no light + leakage from the unstimulated eye. +- The OpenXR / LibOVR compositor supplies a per-frame predicted photon + time (``app_motion_to_photon_latency_s``), which is logged to the + ``_timing.csv`` sidecar and applied trial-by-trial in the analysis to + cancel most of the output-side display latency (render queue, + compositor buffering, scan-out, HMD persistence). +- A keyboard (spacebar) or Quest controller trigger is required to advance + past block instructions and to exit the experiment. The presented + stimulus is otherwise hands-free during the block — there is no manual + eye covering required. + +A residual unmeasured chain delay (Quest Link transport + panel scan-out ++ LCD response + Cyton RF) of ~25 ± 15 ms remains, and is treated as a +fixed ``link_panel_lag`` constant in the analysis. Differential +biomarkers (IOLD, check-size slope difference, amplitude ratios, +Δ-asymmetry contrasts) are robust to this residual because both eyes +share the same chain — the residual cancels in any L−R contrast. +*Absolute* P100 latency (vs clinical norms) does *not* survive this +residual and is not reported as a clinical number. + +A separate stimulus calibration caveat applies to VR: the Quest panel is +not photometrically calibrated to a specific cd/m² or contrast ratio, so +absolute P100 *amplitude* will diverge from clinical norms by an unknown +constant factor. As with the latency offset, differential / within- +subject biomarkers remain interpretable; absolute amplitudes are not +interchangeable with clinical norms. + +In monitor mode the software flip is the only timing source, so any +fixed display-pipeline latency must be characterised separately if +absolute latency is needed. The most accurate option is a photodiode +taped over a sync patch on the screen with its analogue output routed +into a spare Cyton input (auxiliary channel or a free EEG channel) — +the diode fires when actual photons arrive at the screen, so epoching +off the diode trace aligns trials to true stimulus onset with sub-frame +precision and removes the entire display-chain residual. Electrode Placement ------------------- -The P100 is generated in occipital cortex. Priority electrode placement -for the OpenBCI Cyton is: +The P100 is generated in occipital cortex. The default cap montage in +``00x__pattern_reversal_run_experiment.py`` is an 8-channel OpenBCI +Cyton layout: + +.. code-block:: python + + ch_names = ["Fz", "Pz", "P7", "P8", "O1", "O2", "Oz", "M2"] + # Reference: M1 (Cyton SRB / hardware reference) + # Ground: A2 + +Channel roles in the analysis pipeline: + +1. **Oz** — the primary ISCEV electrode; highest-amplitude P100. All + single-channel biomarkers (IOLD, check-size slope, amplitude ratio, + bootstrap CI) are computed at Oz. +2. **O1, O2** — lateral occipital. Used for the hemispheric-asymmetry + biomarker, but interpretation is confounded by paradoxical + lateralization (V1 dipoles in the calcarine fold project across the + midline). The inter-ocular Δ-asymmetry contrast separates eye- + dependent skew from stationary anatomical / electrode-stationary + asymmetries. +3. **P7, P8** — lateral parieto-occipital electrodes. Because they largely + bypass the "paradoxical lateralization" seen at O1/O2, they provide a + cleaner, more direct readout of each hemisphere independently. They are + essential for side-localizing cortical asymmetry and drive three biomarkers: + lateral propagation latency (7), P7/P8 hemispheric asymmetry (8), and the + lateral-hemisphere composite (9). +4. **Pz** — parietal midline. Used in the topology QC check to confirm + the expected ``Oz > O1/O2 > P7/P8/Pz`` posterior gradient. +5. **Fz** — frontal midline. Doubles as (a) the reference electrode for + the ISCEV Oz−Fz scheme, and (b) when the linked-mastoid scheme is + active, the Halliday polarity-inversion check: a genuine V1-generated + P100 produces an *inverted* (negative) deflection at Fz at the same + latency, confirming a posterior dipole. +6. **M1 (reference) + M2** — mastoids. M1 is the Cyton SRB hardware + reference (zero by construction). M2 is recorded; together they form + the linked-mastoid (M1+M2)/2 reference scheme used alongside Oz−Fz. + +For the alternative ``mark-iv`` montage (Thinkpulse dry actives at 4× +gain), edit ``ch_names`` in ``00x__pattern_reversal_run_experiment.py`` +to the Thinkpulse channel set. + + +Reference Schemes +----------------- + +The analysis pipeline runs every biomarker under two reference schemes +in sequence and prints both: + +- **Oz − Fz (ISCEV standard)** — directly comparable with clinical + PR-VEP norms. Sensitive to Fz contact quality. +- **Linked mastoid (M1+M2)/2** — more stable when Fz contact is weak, + unaffected by frontal EMG, and the only scheme under which the Fz + Halliday polarity-inversion check is meaningful (Fz is zero by + construction under the Oz−Fz reference). + +Each scheme produces its own set of plots and biomarkers; agreement +between the two is itself a quality indicator. + + +Biomarkers +---------- + +The analysis script ``01r__pattern_reversal_viz.py`` reports several differential biomarkers, in addition to the per-condition P100 latency and amplitude at Oz. These are grouped by their primary clinical utility: + +**Remyelination & Longitudinal Tracking (Demyelination Indicators)** +These metrics are the highest value for tracking repair because they isolate pathway delays and cancel out daily systemic noise or anatomical distortions. -1. **Oz** — the primary electrode; highest amplitude P100 -2. **O1, O2** — lateral occipital; provide left/right asymmetry information -3. **POz** — parieto-occipital midline; useful fallback or supplement -4. **Fp1, Fp2** — optional; placed on the forehead to record eye movement - artefacts (EOG) for rejection during analysis +1. **Inter-ocular latency difference (IOLD)** — signed ``L − R`` P100 latency at Oz. ``> 8 ms`` is the most-cited clinical threshold for unilateral demyelination; robust to the ``link_panel_lag`` residual because both eyes share the same chain. The gold standard for longitudinal tracking of optic nerve repair. +2. **Inter-ocular check-size slope difference** — demyelinated (and repairing) optic nerves preferentially delay the small-check response. The ``L_eye − R_eye`` difference of latency-vs-check-size slopes amplifies asymmetric demyelination and is an excellent leading indicator of repair. +5. **Inter-ocular Δ-asymmetry contrast** — ``(O1−O2)|L_eye − (O1−O2)|R_eye``. By subtracting the spatial asymmetry between eyes, it cancels stationary anatomical distortions (e.g., asymmetrical cortical folding). The remaining Δ strictly represents pathway-driven changes over time. +6. **Bootstrap confidence intervals on P100 / IOLD** — 1000 trial-resamples per eye recompute the trimmed-mean P100 location, giving a 95% CI. The IOLD CI is flagged separately for excluding zero (statistically separable) and excluding ±8 ms (clinically meaningful). Tracking this CI width proves remyelination is statistically real. +7. **Lateral extrastriate P100 (P7 / P8) & Propagation** — per-channel P100 detection plus the Oz → lateral propagation latency (``P7−Oz``, ``P8−Oz``). While IOLD tracks *optic nerve* myelination, this tracks *intracortical* white matter myelination. A severe delay here indicates a cortical white matter issue (e.g., TBI, concussion, or cortical demyelination), not an optic nerve problem. + +**Axonal & Compressive Indicators** +While latency measures myelin, amplitude measures the surviving nerve fibers (axons). + +3. **Inter-ocular amplitude ratios** — ``L / R`` P100 amplitude at Oz. Tracks axonal loss (e.g., after severe optic neuritis) or compressive lesions (e.g., tumor blocking the signal). Less specific than latency but critical for differentiating slow recovery from permanent damage. +- **N75–P100–N145 Peak-to-Peak Amplitude** — measures the total "energy" of the visual response, which is more stable than absolute voltage against baseline drift. + +**Morphological & Cortical Indicators** +Focus on waveform shape and direct hemispheric comparisons. + +4. **Hemispheric asymmetry (O1 vs O2)** — per-eye P100 latency/amplitude at O1 and O2. Due to paradoxical lateralization, a deficit at O1 (left scalp) suggests *right* hemisphere involvement. +8. **Lateral extrastriate asymmetry (P7 vs P8)** — direct hemispheric read without the paradoxical lateralization of V1. Flags stationary asymmetry vs. eye-dependent asymmetry. +9. **Combined lateral hemisphere composites** — ``(O1+P7)/2`` vs ``(O2+P8)/2`` traces. Provides ~√2 better SNR than O1/O2 alone. +- **W-Peak (Bifurcated P100) Analysis** — detects if the P100 splits into two peaks (a "W" shape), which often indicates a central scotoma (macular dysfunction) or severe uncorrected refractive error causing spatial desynchronization. + +**Quality Control** + +10. **Topology QC** (linked-mastoid only) — confirms (a) the ``Oz > Pz > 0`` posterior-gradient at the Oz P100 latency, and (b) the Halliday frontal polarity inversion (Fz negative at the Oz P100 latency) which strongly confirms a true V1 generator. + +All biomarkers are computed twice (once per reference scheme) and printed alongside their expected normal ranges, so a session's clinical interpretability is visible at a glance. Latency Resolution @@ -135,66 +260,72 @@ Latency Resolution The precision of a P100 latency estimate depends on three factors: 1. **Display refresh rate** — determines the worst-case stimulus timing - jitter (see *Stimulus Parameters* above). At 120 Hz this is ~4.2 ms - per frame. - + jitter. At 120 Hz this is ~4.2 ms per frame; at 60 Hz, ~16.7 ms. 2. **EEG sampling rate** — the Cyton samples at 250 Hz, giving 4 ms - between samples. Without interpolation, the peak latency is locked to - the nearest sample and cannot resolve shifts smaller than 4 ms. - + between samples. Without interpolation, the peak latency is locked + to the nearest sample and cannot resolve shifts smaller than 4 ms. 3. **Number of trials** — averaging more reversals reduces noise in the - ERP waveform, tightening the confidence interval around the peak - estimate. The default is 8 blocks of 100 reversals (400 per eye). + ERP waveform, tightening the bootstrap CI around the peak estimate. + The default 8-block design yields ~400 reversals per eye (split + across the two check sizes). -To achieve sub-sample precision the analysis pipeline uses **parabolic -interpolation**: a parabola is fitted through the peak sample and its -two neighbours, and the vertex of the fit is taken as the true peak -location. At 250 Hz this brings effective resolution to ~0.5 ms — well -below the sample interval. The interpolated peak finder is used by -default in ``vep_utils.plot_vep()``. +To achieve sub-sample precision, ``vep_utils.get_pr_vep_latencies`` +fits a parabola through the peak sample and its two neighbours and +takes the vertex as the true peak — bringing effective resolution to +~0.5 ms at 250 Hz, well below the sample interval. For studies that require detecting latency shifts of 1–2 ms (e.g. within-subject longitudinal comparisons), the combination of 120 Hz display, parabolic interpolation, and the default 8-block design is -recommended. +recommended. The trimmed-mean evoked estimator (used throughout the +analysis) further reduces sensitivity to occasional blink-contaminated +trials that survive amplitude rejection. Longitudinal Tracking --------------------- -To monitor P100 latency over time — for example during nerve recovery or -longitudinal monitoring — record multiple sessions using the same subject -and session numbering scheme and compare the per-eye P100 across them. +To monitor P100 latency over time — for example during nerve recovery +or longitudinal intervention tracking — record multiple sessions using +the same subject and session numbering scheme. + +The analysis pipeline is split into two scripts so this is fast: + +- ``01r__pattern_reversal_viz.py`` runs the per-session analysis. In + addition to the figures and stdout output, it writes a + ``biomarkers.json`` file into the recording directory containing + every biomarker under both reference schemes plus session metadata + (subject, session, device, site, trial counts, PC-side and + ``link_panel_lag`` timing values). +- ``02r__pattern_reversal_longitudinal.py`` reads every session's + ``biomarkers.json`` for a given subject, builds a flattened + ``pandas.DataFrame``, and plots IOLD, per-eye P100 latency, + check-size slope difference, O1/O2 and P7/P8 Δ-asymmetry, and + amplitude ratio as a function of session. Bootstrap 95% CI bands are + drawn on the IOLD and per-eye P100 panels so a real shift is visually + separable from session noise. -Before attributing a latency change to an intervention, establish a -**baseline**: record at least 3–5 sessions over 1–2 weeks under the same -conditions. This gives you the natural session-to-session variability for -your setup and participant, so you can distinguish a real shift from -measurement noise. +This split means new longitudinal points are added in seconds (read +JSON, plot) rather than minutes (re-load EEG, filter, epoch, +bootstrap), and individual sessions can be re-analysed without +invalidating the rest of the trend series. -The ``02r__pattern_reversal_longitudinal.py`` example notebook -demonstrates the full workflow: discovering sessions, extracting per-eye -P100 latencies with parabolic interpolation, printing a summary table, -and plotting latency trends and interocular differences over time. +Before attributing a latency change to an intervention (like remyelination), establish a **baseline**: record at least 3–5 sessions over 1–2 weeks under the same conditions. Latency shifts can be caused by many non-pathological factors, including subject fatigue, alertness, caffeine intake, body temperature changes, or ocular differences (like pupil size or slight changes in focus/fixation). The longitudinal script supports a ``BASELINE_LAST_SESSION_NB`` cutoff that limits the summary statistics to those initial sessions, capturing the natural day-to-day variability for your setup and participant. Subsequent sessions need to fall significantly outside this baseline variability (e.g., beyond the ``mean ± std``) to be considered a true physiological or structural shift. Timing Notes ------------ -Measured P100 latency is the true P100 latency plus the display-pipeline -delay, plus the EEG device's input delay, plus any clock-alignment -error. For the Cyton the USB-serial latency is typically ~30–40ms, so -if you need *absolute* latencies you need to characterise and subtract -it; for *relative* comparisons (between-eye, within-subject across -sessions) it cancels out and you can ignore it. - Two sidecar files are written alongside each recording to let you check timing after the fact: - ``{save_fn}_timing.csv`` — per-trial software and compositor - timestamps and their delta -- ``{save_fn}_frame_stats.json`` — per-frame intervals and dropped-frame - count (150%-of-refresh threshold) + timestamps and their delta, including the per-trial + ``app_motion_to_photon_latency_s`` used by the analysis. +- ``{save_fn}_frame_stats.json`` — per-frame intervals and dropped- + frame count (150%-of-refresh threshold). + + References diff --git a/doc/getting_started/streaming.md b/doc/getting_started/streaming.md index f28ebde87..53792b74e 100644 --- a/doc/getting_started/streaming.md +++ b/doc/getting_started/streaming.md @@ -63,6 +63,9 @@ be run to begin the notebooks interfacing with the bluemuse backend. **Needed Parameters:** **Optional Parameters:** +**Cyton USB-Serial Latency (Windows):** +A note on Cyton USB-serial latency: the Windows FTDI driver default `LatencyTimer` of 16 ms causes batched marker delivery and corrupts millisecond-grade marker timing. The experiment scripts assert `LatencyTimer = 1 ms` at startup; recordings predating this assertion contain a ~15 ms hardware buffering lag on the marker channel that must be subtracted before comparing absolute latencies across sessions. + ### OpenBCI Cyton + Daisy ![fig](../img/cyton_daisy.png) **Device Name:** *'cyton_daisy'* or *'cyton_daisy_wifi'* with WiFi Shield diff --git a/eegnb/analysis/vep_utils.py b/eegnb/analysis/vep_utils.py index 9cf44ca7c..ea283e6d4 100644 --- a/eegnb/analysis/vep_utils.py +++ b/eegnb/analysis/vep_utils.py @@ -1,6 +1,9 @@ import numpy as np from mne import Evoked +ISCEV_CHECK_DEG_LARGE = 1.0 +ISCEV_CHECK_DEG_SMALL = 0.25 + def print_latency(peak_name, peak_latency, peak_channel, uv): peak_latency = round(peak_latency * 1e3, 2) # convert to milliseconds From 93f92ef61e1870c6c27ffe3855d50cdb08d2d201 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 27 Apr 2026 17:07:29 +1000 Subject: [PATCH 62/94] updated experiment to use alternating block sizes --- .gitignore | 3 + .../visual_vep/pattern_reversal_vep.py | 343 ++++++++++-------- 2 files changed, 189 insertions(+), 157 deletions(-) diff --git a/.gitignore b/.gitignore index 2b5152507..40e3c80c4 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,9 @@ doc/sg_execution_times.rst # Built by auto_examples examples/visual_cueing/*.csv +# Jupytext-paired notebooks (the .py is the source of truth; .ipynb is auto-paired) +**.ipynb + # tests/coverage artifacts .coverage coverage.xml diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index 22a2d292f..f3dca79d5 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -1,50 +1,87 @@ import logging +import random import numpy as np from psychopy import visual from typing import Optional, Dict, Any from eegnb.devices.eeg import EEG from eegnb.experiments.BlockExperiment import BlockExperiment +from eegnb.analysis.vep_utils import ISCEV_CHECK_DEG_LARGE, ISCEV_CHECK_DEG_SMALL from stimupy.stimuli.checkerboards import contrast_contrast # ISCEV PR-VEP standard -ISCEV_CHECK_DEG = 1.0 ISCEV_FIELD_DEG = 16.0 ISCEV_MEAN_LUM = 0.0 -QUEST2_PPD_NOMINAL = 20 +# Block conditions, indexed by label 0-3. Label encoding: bit 0 = eye, bit 1 = size class. +# CONDITIONS[label] is also (size_idx, eye_idx) flattened: size_idx = label >> 1, eye_idx = label & 1. +CONDITIONS = [ + {'eye': 'left', 'size_name': 'large', 'size_idx': 0, 'check_deg': ISCEV_CHECK_DEG_LARGE}, + {'eye': 'right', 'size_name': 'large', 'size_idx': 0, 'check_deg': ISCEV_CHECK_DEG_LARGE}, + {'eye': 'left', 'size_name': 'small', 'size_idx': 1, 'check_deg': ISCEV_CHECK_DEG_SMALL}, + {'eye': 'right', 'size_name': 'small', 'size_idx': 1, 'check_deg': ISCEV_CHECK_DEG_SMALL}, +] + +# Hierarchical event tags → integer marker codes. The slash-delimited tags let +# MNE epoch by partial match (e.g. event_id key 'rev/left' selects both sizes). +# Kept stable across recordings so analysis can hard-code this dict. +EVENTS = { + **{f"rev/{c['eye']}/{c['size_name']}": 1 + i for i, c in enumerate(CONDITIONS)}, + **{f"block/{c['eye']}/{c['size_name']}": 100 + i for i, c in enumerate(CONDITIONS)}, +} + class VisualPatternReversalVEP(BlockExperiment): def __init__(self, eeg: Optional[EEG] = None, save_fn=None, - block_duration_seconds=50, block_trial_size: int=100, n_blocks: int=8, use_vr=False, use_fullscr=True): + block_duration_seconds: int = 50, + block_trial_size: int = 100, + reps_per_condition: int = 2, + use_vr: bool = False, + use_fullscr: bool = True): + """ + Pattern Reversal VEP with two check sizes, counterbalanced across blocks. + + Block schedule: 4 shuffled conditions (left/right eye, large/small check) × + ``reps_per_condition`` blocks. Block-start markers (100–103) are pushed on + the first reversal of each block to record the condition sequence. + """ + n_conditions = 4 + n_blocks = n_conditions * reps_per_condition + soa = 0.5 + + super().__init__( + "Visual Pattern Reversal VEP", + block_duration_seconds, eeg, save_fn, + block_trial_size, n_blocks, + iti=0, soa=soa, jitter=0, + use_vr=use_vr, use_fullscr=use_fullscr, stereoscopic=True, + ) - soa=0.5 - iti=0 - jitter=0 + self.instruction_text = ( + f"Welcome to the Pattern Reversal VEP experiment!\n\n" + f"{n_blocks} blocks of {block_duration_seconds} s each.\n" + f"left/right eye × large/small checks)\n\n" + f"Press spacebar or trigger to continue." + ) - super().__init__("Visual Pattern Reversal VEP", block_duration_seconds, eeg, save_fn, block_trial_size, n_blocks, iti, soa, jitter, use_vr, use_fullscr, stereoscopic=True) + # Build and shuffle the block schedule. + block_labels = list(range(n_conditions)) * reps_per_condition + random.shuffle(block_labels) + self.block_labels = block_labels + logging.info("[PRVEP] block schedule: %s", block_labels) - self.instruction_text = f"""Welcome to the Visual Pattern Reversal VEP experiment! - - This experiment will run for {n_blocks} blocks of {block_duration_seconds} seconds each. - - Press spacebar or controller to continue. - """ + # Expand into a per-trial parameter array. + self.parameter = np.array( + [lbl for lbl in block_labels for _ in range(block_trial_size)] + ) - # Setting up the trial and parameter list - left_eye = 0 - right_eye = 1 - # Alternate between left and right eye blocks - block_eyes = [] - for block_num in range(n_blocks): - eye = left_eye if block_num % 2 == 0 else right_eye - block_eyes.extend([eye] * block_trial_size) - self.parameter = np.array(block_eyes) + # ------------------------------------------------------------------ + # Stimulus creation helpers + # ------------------------------------------------------------------ @staticmethod - def create_checkerboard(intensity_checks, field_deg=ISCEV_FIELD_DEG, - check_deg=ISCEV_CHECK_DEG, ppd=72): + def make_checker_image(intensity_checks, check_deg, field_deg=ISCEV_FIELD_DEG, ppd=72): cpd = 1.0 / (2.0 * check_deg) return contrast_contrast( visual_size=(field_deg, field_deg), @@ -54,197 +91,189 @@ def create_checkerboard(intensity_checks, field_deg=ISCEV_FIELD_DEG, target_shape=(0, 0), alpha=0, tau=0, - ) + )['img'] def load_stimulus(self) -> Dict[str, Any]: - # TODO: Fix - Rift.GetActualFrameRate() crashes in psychxr due to 'EndFrame called before BeginFrame' refresh_rate = int(np.round( - self.window.displayRefreshRate if self.use_vr else self.window.getActualFrameRate() + self.window.displayRefreshRate if self.use_vr + else self.window.getActualFrameRate() )) - - # Integer frames per reversal cycle required so each half-cycle has the same duration. reversals_per_sec = 1 / self.soa assert refresh_rate % reversals_per_sec == 0, ( f"Frame rate {refresh_rate} Hz must be an integer multiple of " - f"the stimulus reversal rate {reversals_per_sec} Hz" + f"{reversals_per_sec} Hz reversal rate" ) if self.use_vr: - ppd, ipd_mm = self.vr.log_display_info() - logging.info(f"[PRVEP-HMD] optical_axis_ndc=L{self.left_eye_x_pos:+.3f}/R{self.right_eye_x_pos:+.3f}") - - # 1 texel = 1 buffer pixel + ppd, _ = self.vr.log_display_info() + logging.info( + "[PRVEP-HMD] optical_axis_ndc=L%+.3f/R%+.3f", + self.left_eye_x_pos, self.right_eye_x_pos, + ) tex_px = int(round(ISCEV_FIELD_DEG * ppd)) stim_size_px = (tex_px, tex_px) else: ppd = 72 stim_size_px = (self.window_size[1], self.window_size[1]) - if not self.use_vr: - patch_size = 50 - x = -self.window.size[0] / 2 + patch_size / 2 - y = -self.window.size[1] / 2 + patch_size / 2 - self.optode_patch = visual.Rect( - self.window, width=patch_size, height=patch_size, - pos=(x, y), units='pix', fillColor='white' - ) - else: - self.optode_patch = None - - self.black_background = visual.Rect(self.window, - width=self.window.size[0], - height=self.window.size[1], - fillColor='black') - - # Match checkerboard mean luminance to avoid adaptation shift. - self.grey_background = visual.Rect(self.window, - width=self.window.size[0], - height=self.window.size[1], - fillColor=[ISCEV_MEAN_LUM] * 3) + self.grey_background = visual.Rect( + self.window, + width=self.window.size[0], height=self.window.size[1], + fillColor=[ISCEV_MEAN_LUM] * 3, + ) + self.black_background = visual.Rect( + self.window, + width=self.window.size[0], height=self.window.size[1], + fillColor='black', + ) - def create_checkerboard_stim(intensity_checks, pos): + def make_checker_stim(intensity_checks, check_deg, pos): return visual.ImageStim( self.window, - image=self.create_checkerboard( - intensity_checks, - field_deg=ISCEV_FIELD_DEG, - check_deg=ISCEV_CHECK_DEG, - ppd=ppd, - )['img'], + image=self.make_checker_image(intensity_checks, check_deg, ppd=ppd), units='pix', size=stim_size_px, color='white', pos=pos, ) - # Create fixation stimuli - def create_fixation_stim(pos): - size = 0.02 if self.use_vr else 0.4 - return visual.Rect( - win=self.window, - pos=pos, - width=size, - height=size, - units='norm' if self.use_vr else None, - fillColor=[1, -1, -1], - lineColor=[1, -1, -1], + # Fixation cross sized in degrees so it stays sub-check at every + # check-size variant. Clinical PR-VEP uses ~10–20 arcmin marks; 0.25° + # = 15 arcmin keeps it well below the 30 arcmin small check and the + # 60 arcmin large check, so foveal stimulation isn't masked. + FIX_SIZE_DEG = 0.25 + fix_size_px = max(2, int(round(FIX_SIZE_DEG * ppd))) + + def make_fixation(pos_px): + return visual.ShapeStim( + win=self.window, pos=pos_px, + vertices='cross', size=fix_size_px, + units='pix', + fillColor=[1, -1, -1], lineColor=[1, -1, -1], ) - def create_vr_block_instruction(pos): - return visual.TextStim( - win=self.window, - text="Focus on the red dot, and try not to blink whilst the " - "squares are flashing, press the spacebar or pull the " - "controller trigger when ready to commence.", - color=[-1, -1, -1], - pos=pos, height=0.1, - ) + self.instruction_stim = visual.TextStim( + win=self.window, + text="", + color=[-1, -1, -1], + pos=(0, 0), + height=0.08, + units='norm', + wrapWidth=1.8, + ) - # All stimuli placed on each lens's optical axis for symmetric FOV - # and maximum lens resolution. - def create_eye_stimuli(eye_x_pos, pix_x_pos): + def make_eye_stimuli(eye_x_pix): + # Two check-size variants per eye: index 0 = large, 1 = small. return { 'checkerboards': [ - create_checkerboard_stim((1, -1), pos=(pix_x_pos, 0)), - create_checkerboard_stim((-1, 1), pos=(pix_x_pos, 0)) + [ + make_checker_stim((1, -1), ISCEV_CHECK_DEG_LARGE, (eye_x_pix, 0)), + make_checker_stim((-1, 1), ISCEV_CHECK_DEG_LARGE, (eye_x_pix, 0)), + ], + [ + make_checker_stim((1, -1), ISCEV_CHECK_DEG_SMALL, (eye_x_pix, 0)), + make_checker_stim((-1, 1), ISCEV_CHECK_DEG_SMALL, (eye_x_pix, 0)), + ], ], - 'fixation': create_fixation_stim([eye_x_pos, 0]), - 'vr_block_instructions': create_vr_block_instruction((eye_x_pos, 0)) + 'fixation': make_fixation([eye_x_pix, 0]), } if self.use_vr: - # pix_x = ndc_x * (per-eye buffer width / 2) - window_width = self.window.size[0] - left_pix_x_pos = self.left_eye_x_pos * (window_width / 2) - right_pix_x_pos = self.right_eye_x_pos * (window_width / 2) + w = self.window.size[0] return { - 'left': create_eye_stimuli(self.left_eye_x_pos, left_pix_x_pos), - 'right': create_eye_stimuli(self.right_eye_x_pos, right_pix_x_pos) + 'left': make_eye_stimuli(self.left_eye_x_pos * (w / 2)), + 'right': make_eye_stimuli(self.right_eye_x_pos * (w / 2)), } else: - return { - 'monoscopic': create_eye_stimuli(0, 0) - } + return {'monoscopic': make_eye_stimuli(0)} + + # ------------------------------------------------------------------ + # Block instructions + # ------------------------------------------------------------------ - def _present_vr_block_instructions(self, open_eye, closed_eye): - self.window.setBuffer(open_eye) - self.grey_background.draw() - self.stim[open_eye]['vr_block_instructions'].draw() - self.stim[open_eye]['fixation'].draw() - self.window.setBuffer(closed_eye) - self.black_background.draw() + def block_eye_and_size(self, block_index: int): + c = CONDITIONS[self.block_labels[block_index]] + return c['eye'], c['size_name'] def present_block_instructions(self, current_block: int) -> None: + open_eye, size_name = self.block_eye_and_size(current_block) + closed_eye = 'right' if open_eye == 'left' else 'left' + if self.use_vr: - if current_block % 2 == 0: - self._present_vr_block_instructions(open_eye="left", closed_eye="right") - else: - self._present_vr_block_instructions(open_eye="right", closed_eye="left") + self.instruction_stim.text = ( + f"Block {current_block + 1}/{self.n_blocks} — " + f"{open_eye} eye, {size_name} checks\n\n" + "Focus on the red dot.\n" + "Try not to blink while the squares are animating.\n" + "Press spacebar or trigger when ready." + ) + self.window.setBuffer(open_eye) + self.grey_background.draw() + self.instruction_stim.draw() + self.stim[open_eye]['fixation'].draw() + self.window.setBuffer(closed_eye) + self.black_background.draw() else: - if current_block % 2 == 0: - instruction_text = ( - "Close your right eye, then focus on the red dot with your left eye. " - "Press spacebar or controller when ready." - ) - else: - instruction_text = ( - "Close your left eye, then focus on the red dot with your right eye. " - "Press spacebar or controller when ready." - ) - text = visual.TextStim(win=self.window, text=instruction_text, color=[-1, -1, -1]) - text.draw() + text = ( + f"Block {current_block + 1}/{self.n_blocks}\n\n" + f"Close your {closed_eye} eye.\n" + f"Focus on the red dot with your {open_eye} eye.\n" + f"Check size: {size_name} ({ISCEV_CHECK_DEG_LARGE if size_name == 'large' else ISCEV_CHECK_DEG_SMALL}°)\n\n" + "Press spacebar when ready." + ) + visual.TextStim(win=self.window, text=text, color=[-1, -1, -1]).draw() self.stim['monoscopic']['fixation'].draw() self.window.flip() + # ------------------------------------------------------------------ + # Stimulus presentation + # ------------------------------------------------------------------ + def present_stimulus(self, idx: int): - self._draw_frame(idx) - self._push_marker(idx) + # Push block-start marker on the first reversal of each block. + # This lands in the EEG file before the first reversal marker and + # encodes the full condition (eye × check-size) for the analysis. + if idx == 0: + c = CONDITIONS[self.block_labels[self.current_block_index]] + self.push_vr_marker( + EVENTS[f"block/{c['eye']}/{c['size_name']}"], + self.current_block_index * self.block_trial_size, + ) + self.draw_frame(idx) + self.push_marker(idx) - def _draw_frame(self, idx: int): + def draw_frame(self, idx: int): trial_idx = self.current_block_index * self.block_trial_size + idx - label = self.parameter[trial_idx] + c = CONDITIONS[int(self.parameter[trial_idx])] + eye, size_idx = c['eye'], c['size_idx'] + phase = idx % 2 # alternates 0 / 1 for each reversal - open_eye = 'left' if label == 0 else 'right' - closed_eye = 'left' if label == 1 else 'right' - - # draw checkerboard and fixation if self.use_vr: - self.window.setBuffer(open_eye) + closed_eye = 'right' if eye == 'left' else 'left' + self.window.setBuffer(eye) self.grey_background.draw() - display = self.stim['left' if label == 0 else 'right'] - else: - self.black_background.draw() - display = self.stim['monoscopic'] - - checkerboard_frame = idx % 2 - display['checkerboards'][checkerboard_frame].draw() - display['fixation'].draw() - - if self.use_vr: + self.stim[eye]['checkerboards'][size_idx][phase].draw() + self.stim[eye]['fixation'].draw() self.window.setBuffer(closed_eye) self.black_background.draw() - - # Alternate sync patch polarity with each reversal so the photodiode - # fires on every checkerboard flip, not just odd or even frames. - if self.optode_patch is not None: - self.optode_patch.fillColor = 'white' if checkerboard_frame == 0 else 'black' - self.optode_patch.draw() + else: + self.grey_background.draw() + self.stim['monoscopic']['checkerboards'][size_idx][phase].draw() + self.stim['monoscopic']['fixation'].draw() self.window.flip() - def _push_marker(self, idx: int): + def push_marker(self, idx: int): trial_idx = self.current_block_index * self.block_trial_size + idx - label = self.parameter[trial_idx] - marker = self.markernames[label] - - self.push_vr_marker(marker, trial_idx) + c = CONDITIONS[int(self.parameter[trial_idx])] + self.push_vr_marker(EVENTS[f"rev/{c['eye']}/{c['size_name']}"], trial_idx) def present_soa(self, idx: int): - # Redraw the current checkerboard each frame during the SOA wait so the - # VR compositor stays fed (~120 Hz). No marker push / timing row. - self._draw_frame(idx) - + # Keep the compositor fed at full frame rate; no marker push. + self.draw_frame(idx) def present_iti(self): if self.use_vr: - for eye in ['left', 'right']: + for eye in ('left', 'right'): self.window.setBuffer(eye) - self.black_background.draw() + self.grey_background.draw() + else: + self.grey_background.draw() self.window.flip() From b5580cee8ee9f23831813f46b7225d2a334796a8 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 27 Apr 2026 17:09:13 +1000 Subject: [PATCH 63/94] updated montage --- .../00x__pattern_reversal_run_experiment.py | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index e54347022..744fd803a 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -1,19 +1,23 @@ """ PRVEP Run Experiment -=============================== +========================================== -This example demonstrates the initiation of an EEG stream with eeg-expy, -and how to run the Pattern Reversal VEP (PRVEP) experiment. +Pattern Reversal VEP using PsychoPy on a standard monitor or Meta Quest +headset (via psychxr / Meta-Link). The EEG device and save-file are owned +by this script; the stimulus is driven by PsychoPy. -The experiment presents a checkerboard that reverses its black and white squares -at 2 reversals per second, while the participant fixates a central dot. -Each reversal elicits a P100 response at occipital electrodes. +Block schedule: 4 conditions (left/right eye × large/small check) × +``reps_per_condition`` reps = 8 blocks, shuffled at startup. -The experiment supports both standard monitor presentation and Meta Quest VR -presentation via ``use_vr=True``. VR mode is preferred as it provides monocular -stimulation per eye without manual eye closure, and uses compositor-predicted -photon timestamps for improved timing accuracy. +Marker codes: + 1 — reversal, left-eye block + 2 — reversal, right-eye block + Block-start codes (bit 0 = eye, bit 1 = size class): + 100 — block_start, left eye, large check (~60 arcmin / 1 deg) + 101 — block_start, right eye, large check + 102 — block_start, left eye, small check (~30 arcmin / 0.5 deg) + 103 — block_start, right eye, small check """ ################################################################################################### @@ -53,8 +57,8 @@ # Electrode montage type: "cap" or "mark-iv" montage_type = "cap" -# Ground M1, Ref Fz. -ch_names = ["CPz", "POz", "T5", "T6", "O1", "O2", "Oz", "Pz"] +# Ground A2, Ref M1. +ch_names = ["Fz", "Pz", "P7", "P8", "O1", "O2", "Oz", "M2"] # Subject and session identifiers subject_id = 0 @@ -87,7 +91,7 @@ subject_id=subject_id, session_nb=session_nb, data_dir=data_dir) -print(save_fn) +print(f"Saving data to: {save_fn}") ################################################################################################### # Run experiment From 3976a3f354202144c4eb9232383efb9e141b2d97 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 4 May 2026 16:41:44 +1000 Subject: [PATCH 64/94] feat(vep): integrate automated dataset fetch and UX enhancements - Updated 01r__pattern_reversal_viz to automatically fetch the example dataset from Google Drive via gdown if missing (enables CI/CD doc builds). - Modified PR-VEP block schedule to group trials by eye, allowing the use of a physical patch (ISCEV standard) without interrupting the VR session. - Upgraded VR instruction screens to render stereoscopically with color-coded backgrounds (black for patched eye, grey for open eye). - Fixed diagnostics.py signal check to correctly identify and warn about shared reference (M1/A2) failures when all channels inflate simultaneously. --- .gitattributes | 19 + eegnb/analysis/recording_quality.py | 180 ++ eegnb/analysis/vep_utils.py | 305 ++- eegnb/datasets/datasets.py | 2 +- eegnb/devices/vr.py | 74 + eegnb/experiments/Experiment.py | 133 +- eegnb/experiments/diagnostics.py | 232 ++ .../visual_vep/pattern_reversal_vep.py | 106 +- .../00x__pattern_reversal_run_experiment.py | 47 +- .../visual_vep/01r__pattern_reversal_viz.py | 1931 ++++++++++++++++- .../02r__pattern_reversal_longitudinal.py | 337 +++ 11 files changed, 3182 insertions(+), 184 deletions(-) create mode 100644 .gitattributes create mode 100644 eegnb/analysis/recording_quality.py create mode 100644 eegnb/experiments/diagnostics.py create mode 100644 examples/visual_vep/02r__pattern_reversal_longitudinal.py diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..1e88f1ba8 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,19 @@ +# Force LF line endings for WSL and cross-platform (Linux/Mac/GitHub Actions) compatibility +# This prevents obscure bugs when running Windows-edited scripts on Linux runners. +* text=auto eol=lf + +*.py text eol=lf +*.rst text eol=lf +*.md text eol=lf +*.yml text eol=lf +*.yaml text eol=lf +*.cfg text eol=lf +*.toml text eol=lf +*.ipynb text eol=lf + +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.pdf binary diff --git a/eegnb/analysis/recording_quality.py b/eegnb/analysis/recording_quality.py new file mode 100644 index 000000000..60cb091b6 --- /dev/null +++ b/eegnb/analysis/recording_quality.py @@ -0,0 +1,180 @@ +"""Per-recording contact quality diagnostic for an eegnb session directory. + +Can be used programmatically (returns a formatted string or structured dict) +or from the command line via ``tools/recording_quality.py``. +""" +import pathlib + +import numpy as np +import pandas as pd + + +EEG_CHANNEL_CANDIDATES = [ + 'Fz', 'Pz', 'P7', 'P8', 'O1', 'O2', 'Oz', 'M1', 'M2', + 'Cz', 'C3', 'C4', 'F3', 'F4', 'T7', 'T8', 'F7', 'F8', + 'AF7', 'AF8', 'TP9', 'TP10', +] + +BIG_SAMPLE_UV = 200.0 +DRIFT_WIN_SECS = 10 +NOISE_FACTOR_FLAG = 1.5 + + +def _detect_sfreq(timestamps: np.ndarray) -> float: + diffs = np.diff(timestamps) + diffs = diffs[(diffs > 0) & (diffs < 1.0)] + return float(1.0 / np.median(diffs)) if len(diffs) else 250.0 + + +def _channel_metrics(x: np.ndarray, sfreq: float) -> dict: + x = x - np.mean(x) + win = max(1, int(DRIFT_WIN_SECS * sfreq)) + drift = float(pd.Series(x).rolling(win, center=False).mean().dropna().pipe( + lambda s: s.max() - s.min() + )) if len(x) >= win else 0.0 + return { + 'std': float(np.std(x)), + 'p99': float(np.percentile(np.abs(x), 99)), + 'max': float(x.max()), + 'min': float(x.min()), + 'drift': drift, + 'pct_big': 100.0 * float(np.mean(np.abs(x) > BIG_SAMPLE_UV)), + } + + +def check_session(session_dir: pathlib.Path) -> dict: + """Return structured quality metrics for a session directory. + + Reads every ``recording_*.csv`` (excluding ``*_timing.csv``) and computes + per-channel std / p99 / drift metrics. + + Returns a dict with keys: + report : str — formatted text report (same as report_session()) + flagged_channels : list — channel names flagged in any recording + (std or drift > 1.5× group median) + shared_ref_suspect : bool — True when ≥ half of channels are flagged, + indicating M1/SRB loose rather than isolated + electrode contacts + """ + session_dir = pathlib.Path(session_dir).expanduser().resolve() + recs = sorted( + p for p in session_dir.glob('recording_*.csv') + if not p.stem.endswith('_timing') and not p.name.endswith('.excluded') + ) + + lines = [] + w = lines.append + + if not recs: + w(f'No recording_*.csv files found in {session_dir}') + return {'report': '\n'.join(lines), 'flagged_channels': [], 'shared_ref_suspect': False} + + w(f'Session: {session_dir.name}') + w(f'Found {len(recs)} recording(s)') + w('') + w('Column legend (all values in µV, raw signal — compare channels relative to each other):') + w(f' std Standard deviation — overall noise level per channel.') + w(f' p99|x| 99th percentile of |signal| — sustained noise floor, robust to single spikes.') + w(f' max/min Largest/smallest raw sample — flags electrode pops or movement artifacts.') + w(f' drift Range of 10 s rolling mean — slow DC wander from drying gel or loose contact.') + w(f' %>200 % of samples exceeding {BIG_SAMPLE_UV:.0f} µV — mainly useful comparing recordings, not channels.') + w('') + w('Interpreting the table: look for channels with std or drift significantly higher than') + w('the others. A single outlier = bad electrode contact. All channels inflated = loose reference.') + w('') + + rows = [] + flagged_channels: set = set() + + for p in recs: + df = pd.read_csv(p) + eeg_chs = [c for c in df.columns if c in EEG_CHANNEL_CANDIDATES] + sfreq = _detect_sfreq(df['timestamps'].values) if 'timestamps' in df else 250.0 + rec_min = len(df) / sfreq / 60.0 + w(f'=== {p.stem.split("recording_")[-1]} ' + f'({rec_min:.1f} min, {len(df)} samples, ~{sfreq:.0f} Hz) ===') + + ch_metrics = {} + for ch in eeg_chs: + ch_metrics[ch] = _channel_metrics(df[ch].values.astype(float), sfreq) + rows.append({'rec': p.stem.split('recording_')[-1], 'ch': ch, **ch_metrics[ch]}) + + med_std = float(np.median([m['std'] for m in ch_metrics.values()])) + med_drift = float(np.median([m['drift'] for m in ch_metrics.values()])) + + w(f' {"ch":>4} {"std":>8} {"std×":>5} {"p99|x|":>8} ' + f'{"max":>8} {"min":>8} {"drift":>8} {"drift×":>6} {"%>{:.0f}".format(BIG_SAMPLE_UV):>6}') + for ch, m in ch_metrics.items(): + std_x = m['std'] / med_std if med_std > 0 else 1.0 + drift_x = m['drift'] / med_drift if med_drift > 0 else 1.0 + flagged = std_x > NOISE_FACTOR_FLAG or drift_x > NOISE_FACTOR_FLAG + if flagged: + flagged_channels.add(ch) + flag_str = '⚑' if flagged else ' ' + w(f' {ch:>4} {m["std"]:>8.1f} {std_x:>5.2f} {m["p99"]:>8.1f} ' + f'{m["max"]:>8.1f} {m["min"]:>8.1f} ' + f'{m["drift"]:>8.1f} {drift_x:>6.2f} {m["pct_big"]:>6.2f} {flag_str}') + w(f' (median std={med_std:.1f} µV median drift={med_drift:.1f} µV ' + f'flag threshold: ×>{NOISE_FACTOR_FLAG})') + + # Shared-reference diagnosis per recording: if ≥ half of channels are + # flagged the noise is uniform, pointing at a loose M1/SRB rather than + # isolated electrode contacts. + n_flagged_rec = sum( + 1 for m in ch_metrics.values() + if (m['std'] / med_std if med_std > 0 else 1.0) > NOISE_FACTOR_FLAG + or (m['drift'] / med_drift if med_drift > 0 else 1.0) > NOISE_FACTOR_FLAG + ) + if n_flagged_rec >= len(eeg_chs) / 2: + w(f' ⚑ SHARED REFERENCE SUSPECT — {n_flagged_rec}/{len(eeg_chs)} channels flagged ' + f'(all-channel inflation → M1/SRB loose)') + elif n_flagged_rec: + w(f' ⚑ {n_flagged_rec} channel(s) flagged — isolated contact issue(s)') + w('') + + df_all = pd.DataFrame(rows) + summary = df_all.groupby('rec').agg( + med_std=('std', 'median'), + med_p99=('p99', 'median'), + med_drift=('drift', 'median'), + ) + + w('=== PER-RECORDING SUMMARY (median across EEG channels) ===') + w(f' {"rec":<22} {"med_std":>8} {"med_p99":>8} {"med_drift":>10}') + for rec in summary.index: + s = summary.loc[rec] + w(f' {rec:<22} {s.med_std:>8.1f} {s.med_p99:>8.1f} {s.med_drift:>10.1f}') + + w('') + w('=== EXCLUSION CANDIDATES ===') + baseline = float(summary.med_std.min()) + any_exclude = False + for rec in summary.index: + factor = float(summary.loc[rec, 'med_std']) / baseline + flag = factor > NOISE_FACTOR_FLAG + any_exclude |= flag + w(f' {rec}: median_std={summary.loc[rec,"med_std"]:.1f} ' + f'({factor:.2f}x) [{"EXCLUDE?" if flag else "ok"}]') + + w('') + if any_exclude: + w('⚑ One or more recordings flagged as substantially noisier.') + + # Determine overall shared-reference suspicion across the whole session + all_ch_names = list(dict.fromkeys(r['ch'] for r in rows)) # ordered unique + shared_ref_suspect = len(flagged_channels) >= len(all_ch_names) / 2 + + return { + 'report': '\n'.join(lines), + 'flagged_channels': sorted(flagged_channels), + 'shared_ref_suspect': shared_ref_suspect, + } + + +def report_session(session_dir: pathlib.Path) -> str: + """Return a formatted quality report string for a session directory. + + Reads every ``recording_*.csv`` (excluding ``*_timing.csv``) and reports + per-channel std / p99 / drift, plus exclusion candidates. + """ + return check_session(session_dir)['report'] diff --git a/eegnb/analysis/vep_utils.py b/eegnb/analysis/vep_utils.py index ea283e6d4..564514698 100644 --- a/eegnb/analysis/vep_utils.py +++ b/eegnb/analysis/vep_utils.py @@ -1,9 +1,15 @@ import numpy as np -from mne import Evoked +from mne import Evoked, EvokedArray +from scipy.stats import trim_mean ISCEV_CHECK_DEG_LARGE = 1.0 ISCEV_CHECK_DEG_SMALL = 0.25 +# Default thresholds used by clinical PR-VEP biomarkers. Override per-call +# only if you have a paradigm-specific reason to. +IOLD_FLAG_MS = 8.0 # |L − R P100 latency| above this flags suspected unilateral demyelination +LOG2_AMP_FLAG = 1.0 # |log2(L/R P100 amplitude)| above this flags inter-ocular drive imbalance + def print_latency(peak_name, peak_latency, peak_channel, uv): peak_latency = round(peak_latency * 1e3, 2) # convert to milliseconds @@ -72,3 +78,300 @@ def get_pr_vep_latencies(evoked_occipital: Evoked): peak_time_min=0.120, peak_time_max=0.170, mode='neg') return n75, p100, n145 + + +# --------------------------------------------------------------------------- +# Robust averaging + JSON helper +# --------------------------------------------------------------------------- + +def trimmed_average(epochs, proportiontocut=0.1): + """Per-sample trimmed-mean evoked across trials. + + Standard ``epochs.average()`` is biased by occasional single-trial outliers + that survive amplitude-based rejection. Dropping the top and bottom + ``proportiontocut`` fraction at each timepoint produces a more + representative waveform without raising the rejection threshold or + discarding whole epochs. + """ + data = epochs.get_data() # (n_trials, n_channels, n_times) + if data.shape[0] == 0: + return epochs.average() + avg = trim_mean(data, proportiontocut=proportiontocut, axis=0) + nave = int(round(data.shape[0] * (1 - 2 * proportiontocut))) + return EvokedArray(avg, epochs.info, tmin=epochs.tmin, nave=nave, + comment=f'trimmed-mean ({int(proportiontocut * 100)}%)') + + +def json_safe_float(x): + """Coerce numpy scalars / None / NaN / Inf to JSON-safe Python floats.""" + if x is None: + return None + try: + v = float(x) + except (TypeError, ValueError): + return None + if np.isnan(v) or np.isinf(v): + return None + return v + + +# --------------------------------------------------------------------------- +# PR-VEP biomarkers (pure computation; printing/plotting stays in callers) +# --------------------------------------------------------------------------- + +def compute_iold(p100_left, p100_right, flag_threshold_ms=IOLD_FLAG_MS): + """Inter-ocular latency difference at P100 (signed L − R, ms). + + Returns ``None`` if either eye is missing a P100 detection. Otherwise a + dict with per-eye latency/amplitude, the signed difference, and a + threshold-crossing flag suitable for clinical screening. + """ + if p100_left is None or p100_right is None: + return None + p100_left_ms = p100_left['latency'] * 1000.0 + p100_right_ms = p100_right['latency'] * 1000.0 + iold_ms = p100_left_ms - p100_right_ms + return { + 'p100_left_ms': json_safe_float(p100_left_ms), + 'p100_right_ms': json_safe_float(p100_right_ms), + 'p100_left_uv': json_safe_float(p100_left['amplitude'] * 1e6), + 'p100_right_uv': json_safe_float(p100_right['amplitude'] * 1e6), + 'iold_ms': json_safe_float(iold_ms), + 'flag': bool(abs(iold_ms) > flag_threshold_ms), + } + + +def compute_iold_per_size(epochs, event_id, ch_name, + sizes=('large', 'small'), + eye_prefixes=('left_eye', 'right_eye'), + flag_threshold_ms=IOLD_FLAG_MS): + """Per-check-size IOLD. + + Demyelination preferentially delays the high-spatial-frequency (small- + check) response, so the per-size IOLD often surfaces lateralised + dysfunction that the size-pooled IOLD averages out. + + For each size in ``sizes``, trims-mean per-eye epochs at ``ch_name``, + locates P100, then runs :func:`compute_iold` on the pair. Returns + ``{size: iold_dict_or_None}``. + """ + out = {} + for size in sizes: + peaks = {} + for eye in eye_prefixes: + cond_key = f'{eye}/{size}' + if cond_key not in event_id or len(epochs[cond_key]) == 0: + peaks[eye] = None + continue + ev = trimmed_average(epochs[cond_key]).copy().pick([ch_name]) + _, p100, _ = get_pr_vep_latencies(ev) + peaks[eye] = p100 + out[size] = compute_iold(peaks.get('left_eye'), peaks.get('right_eye'), + flag_threshold_ms=flag_threshold_ms) + return out + + +def compute_amplitude_ratio(p100_left, p100_right, log2_flag=LOG2_AMP_FLAG): + """P100 amplitude ratio L/R (rectified) and log2 ratio. + + Returns ``None`` if either eye lacks a P100 or right-eye amplitude is zero + (ratio undefined). + """ + if p100_left is None or p100_right is None: + return None + amp_l_uv = abs(p100_left['amplitude']) * 1e6 + amp_r_uv = abs(p100_right['amplitude']) * 1e6 + if amp_r_uv <= 0: + return None + ratio = amp_l_uv / amp_r_uv + log2_ratio = float(np.log2(ratio)) + return { + 'amp_left_uv': json_safe_float(amp_l_uv), + 'amp_right_uv': json_safe_float(amp_r_uv), + 'ratio': json_safe_float(ratio), + 'log2_ratio': json_safe_float(log2_ratio), + 'flag': bool(abs(log2_ratio) > log2_flag), + } + + +def compute_check_size_slope(epochs, event_id, ch_name, check_size_arcmin, + eye_prefixes=('left_eye', 'right_eye'), + min_trials=5): + """Per-eye P100 latency slope vs. check size (ms / arcmin). + + For each (eye × size) condition present in ``event_id`` (keys of the form + ``"{eye_prefix}/{size_label}"``), trims-mean across trials, locates the + P100 in the canonical search window, and fits a line of P100 latency vs. + check size in arcmin. The L − R slope difference amplifies asymmetric + spatial-frequency-dependent demyelination. + + Returns a dict with per-condition P100 latencies, per-eye slopes (or None + if fewer than two sizes were detected), and the L − R slope difference (or + None if either eye is missing a slope). + """ + out = { + 'per_condition_p100_ms': {}, + 'slope_left_ms_per_arcmin': None, + 'slope_right_ms_per_arcmin': None, + 'slope_diff': None, + } + rows = [] + for eye in eye_prefixes: + for size_label, arcmin in check_size_arcmin.items(): + cond_key = f'{eye}/{size_label}' + if cond_key not in event_id: + continue + ep = epochs[cond_key] + if len(ep) < min_trials: + continue + ev = trimmed_average(ep) + _, p100_c, _ = get_pr_vep_latencies(ev.copy().pick([ch_name])) + if p100_c is None: + continue + lat_ms = p100_c['latency'] * 1000.0 + rows.append({'eye': eye, 'size_label': size_label, + 'size_arcmin': arcmin, 'p100_ms': lat_ms}) + out['per_condition_p100_ms'][cond_key] = json_safe_float(lat_ms) + + slopes = {} + for eye in eye_prefixes: + eye_rows = [r for r in rows if r['eye'] == eye] + if len(eye_rows) >= 2: + xs = np.array([r['size_arcmin'] for r in eye_rows]) + ys = np.array([r['p100_ms'] for r in eye_rows]) + slopes[eye] = float(np.polyfit(xs, ys, 1)[0]) + if 'left_eye' in slopes: + out['slope_left_ms_per_arcmin'] = json_safe_float(slopes['left_eye']) + if 'right_eye' in slopes: + out['slope_right_ms_per_arcmin'] = json_safe_float(slopes['right_eye']) + if 'left_eye' in slopes and 'right_eye' in slopes: + out['slope_diff'] = json_safe_float(slopes['left_eye'] - slopes['right_eye']) + return out + + +def bootstrap_p100_latency(epochs, event_id, ch_name, eye_prefix, + win_ms=(60, 160), n_boot=1000, seed=0, + proportiontocut=0.1, min_trials=10): + """Bootstrap distribution of P100 latency for one eye. + + Trial-resamples with replacement, recomputes the trimmed-mean evoked at + ``ch_name``, and locates the positive max in ``win_ms``. Returns a + length-``n_boot`` array of latencies (ms), or ``None`` if there aren't + enough trials. Pair two calls (one per eye) to derive an IOLD CI from the + pairwise differences. + """ + keys = [k for k in event_id if k.startswith(eye_prefix)] + if not keys: + return None + ep = epochs[keys].copy().pick([ch_name]) + data = ep.get_data()[:, 0, :] + if data.shape[0] < min_trials: + return None + times_ms = ep.times * 1000.0 + win_mask = (times_ms >= win_ms[0]) & (times_ms <= win_ms[1]) + win_times = times_ms[win_mask] + n_trials = data.shape[0] + rng = np.random.default_rng(seed) + times_all = ep.times * 1000.0 # full time axis in ms + dt = float(times_all[1] - times_all[0]) # sample period (ms) + win_indices = np.where(win_mask)[0] # absolute indices of window samples + latencies = np.empty(n_boot) + for b in range(n_boot): + idx = rng.integers(0, n_trials, n_trials) + boot_avg = trim_mean(data[idx], proportiontocut=proportiontocut, axis=0) + + # Grid-level peak within the search window + local_peak = np.argmax(boot_avg[win_mask]) + abs_peak = win_indices[local_peak] + + # Parabolic interpolation: recovers sub-sample peak location, + # reducing CI quantisation from ±dt to roughly ±0.3 dt. + if 0 < abs_peak < len(boot_avg) - 1: + y_l = boot_avg[abs_peak - 1] + y_c = boot_avg[abs_peak] + y_r = boot_avg[abs_peak + 1] + denom = y_l - 2 * y_c + y_r + if abs(denom) > 1e-30: + offset = 0.5 * (y_l - y_r) / denom # fractional sample offset + latencies[b] = times_all[abs_peak] + offset * dt + else: + latencies[b] = times_all[abs_peak] + else: + latencies[b] = times_all[abs_peak] + + return latencies + + +def compute_hemi_asymmetry(evoked_avg, ch_left, ch_right, + lat_flag_ms=IOLD_FLAG_MS, log2_flag=LOG2_AMP_FLAG): + """P100 latency/amplitude asymmetry between two hemispheric channels. + + Works for any homologous pair (O1/O2, P7/P8, ...). Returns ``None`` if + either channel fails P100 detection. Sign convention: ``lat_diff = + ch_left − ch_right``, so positive means the left-named channel is later. + """ + ev_l = evoked_avg.copy().pick([ch_left]) + ev_r = evoked_avg.copy().pick([ch_right]) + _, p100_l, _ = get_pr_vep_latencies(ev_l) + _, p100_r, _ = get_pr_vep_latencies(ev_r) + if p100_l is None or p100_r is None: + return None + lat_l = p100_l['latency'] * 1000.0 + lat_r = p100_r['latency'] * 1000.0 + amp_l = abs(p100_l['amplitude']) * 1e6 + amp_r = abs(p100_r['amplitude']) * 1e6 + lat_diff = lat_l - lat_r + amp_ratio = amp_l / amp_r if amp_r > 0 else float('inf') + log2_ratio = float(np.log2(amp_ratio)) if amp_r > 0 else float('nan') + return { + f'lat_{ch_left.lower()}': json_safe_float(lat_l), + f'lat_{ch_right.lower()}': json_safe_float(lat_r), + f'amp_{ch_left.lower()}': json_safe_float(amp_l), + f'amp_{ch_right.lower()}': json_safe_float(amp_r), + 'lat_diff_ms': json_safe_float(lat_diff), + 'amp_ratio': json_safe_float(amp_ratio), + 'log2_ratio': json_safe_float(log2_ratio), + 'lat_flag': bool(abs(lat_diff) > lat_flag_ms), + 'amp_flag': bool(amp_r > 0 and abs(log2_ratio) > log2_flag), + } + + +def compute_hemi_delta_asymmetry(left_eye_hemi, right_eye_hemi, + ch_left, ch_right): + """Inter-ocular contrast of hemispheric asymmetry. + + Δlat = (chL − chR)|left_eye − (chL − chR)|right_eye + Δlog2 = log2(chL/chR)|left_eye − log2(chL/chR)|right_eye + + A purely anatomical chL 0 else float('nan')) + log2_asym_R = (np.log2(R[amp_key_l] / R[amp_key_r]) + if R[amp_key_r] > 0 else float('nan')) + d_log2 = log2_asym_L - log2_asym_R + return { + 'lat_asym_left': json_safe_float(lat_asym_L), + 'lat_asym_right': json_safe_float(lat_asym_R), + 'd_lat': json_safe_float(d_lat), + 'log2_asym_left': json_safe_float(log2_asym_L), + 'log2_asym_right': json_safe_float(log2_asym_R), + 'd_log2': json_safe_float(d_log2), + } diff --git a/eegnb/datasets/datasets.py b/eegnb/datasets/datasets.py index 16b462b00..61a7fa429 100644 --- a/eegnb/datasets/datasets.py +++ b/eegnb/datasets/datasets.py @@ -59,7 +59,7 @@ def fetch_dataset( # List gdrive extensions for various experiments gdrive_locs = { - "visual-PRVEP": None, # TODO: upload example dataset to Google Drive and paste the file ID here + "visual-PRVEP": "1qn-0OSxlO6-stL6EXh9VT4pMSFghCXBG", "visual-SSVEP": "1zj9Wx-YEMJo7GugUUu7Sshcybfsr-Fze", "visual-spatialfreq": "1ggBt7CNvMgddxji-FvxcZoP-IF-PmESX", "visual-P300": "1OLcj-zSjqdNrsBSUAsGBXOwWDnGWTVFC", diff --git a/eegnb/devices/vr.py b/eegnb/devices/vr.py index 2449b2226..9a5af550d 100644 --- a/eegnb/devices/vr.py +++ b/eegnb/devices/vr.py @@ -1,8 +1,34 @@ import logging import numpy as np from time import time +from psychopy import core, monitors from psychopy.visual.rift import Rift + +# Frame-rate deviation above this percentage triggers a user-facing warning. +# Set high (50%) because VR jitter is recoverable per-trial via the timing +# sidecar (app_motion_to_photon_latency_s). The warning catches fundamentally +# broken setups (wrong GPU, no acceleration), not borderline cases. +DISPLAY_DEVIATION_FLAG_PCT = 50.0 + + +def _build_placeholder_monitor(): + """Programmatic Monitor passed to the Rift constructor. + Display geometry comes from the HMD runtime, not this object. + Logger is silenced during construction because Monitor.__init__ emits an + unconditional 'Monitor specification not found' warning for any name not + present in the user's saved calibration database.""" + from psychopy import logging as psy_logging + prev_level = psy_logging.console.level + psy_logging.console.setLevel(psy_logging.ERROR) + try: + mon = monitors.Monitor('eegnb_vr_placeholder', autoLog=False) + mon.setDistance(60) + mon.setSizePix([1920, 1080]) + finally: + psy_logging.console.setLevel(prev_level) + return mon + class VR(Rift): """ Extended VR class for HMDs, providing built-in methods for @@ -10,9 +36,57 @@ class VR(Rift): and per-trial compositor telemetry buffering. """ def __init__(self, *args, **kwargs): + # Provide a placeholder monitor so PsychoPy doesn't emit + # 'Monitor specification not found' on first flip. The values are not + # used by the Rift compositor — display geometry comes from the HMD + # runtime via libovr — but PsychoPy's Window base class still queries + # the monitor object during initialization. + kwargs.setdefault('monitor', _build_placeholder_monitor()) super().__init__(*args, **kwargs) self.libovr_to_wallclock_offset = None + def validate_frame_rate(self, draw_blank, n_frames=60, warmup=10): + """Measure actual frame delivery rate and compare to the runtime target. + + Specific to VR because Quest Link's encoded transport pipeline can + silently degrade (wrong GPU, encode bottleneck) even though the runtime + still advertises its nominal refresh rate. + + Args: + draw_blank: callable that draws a frame and flips the window. + Caller decides eye-buffer logic. + n_frames: measurement window. 60 frames ≈ 0.5s at 120 Hz. + warmup: discarded frames so the compositor reaches steady state. + + Returns: + Dict with ``target_hz``, ``actual_hz``, ``deviation_pct``, ``ok`` + (True iff deviation ≤ ``DISPLAY_DEVIATION_FLAG_PCT``). + """ + target_hz = float(self.displayRefreshRate) + + for _ in range(warmup): + draw_blank() + + t0 = core.getTime() + for _ in range(n_frames): + draw_blank() + elapsed = core.getTime() - t0 + + actual_hz = n_frames / elapsed + deviation = abs(actual_hz - target_hz) / target_hz * 100.0 + + result = { + 'target_hz': round(target_hz, 1), + 'actual_hz': round(actual_hz, 1), + 'deviation_pct': round(deviation, 1), + 'ok': deviation <= DISPLAY_DEVIATION_FLAG_PCT, + } + + status = 'OK' if result['ok'] else 'DEGRADED — check GPU assignment' + print(f"[vr] Target: {target_hz:.0f} Hz Measured: {actual_hz:.1f} Hz " + f"Deviation: {deviation:.1f}% [{status}]") + return result + def compute_optical_axis_offsets(self): """ NDC x offsets placing content on each lens's optical axis: diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index 18b0d5052..6db3de8e5 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -23,6 +23,7 @@ from pandas import DataFrame from eegnb import generate_save_fn +from eegnb.experiments import diagnostics class BaseExperiment(ABC): @@ -77,6 +78,10 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, self.use_fullscr = use_fullscr self.window_size = [1600,800] + # Diagnostic results — populated by run()/setup(), read by show_diagnostics() + self.signal_check = None + self.display_check = None + # Initializing the marker names self.markernames = [1, 2] @@ -135,18 +140,37 @@ def present_soa(self, idx: int): """ self.window.flip() + def _draw_blank_frame(self): + """Draw a blank frame and flip — used for display rate measurement.""" + self._draw(self.window.flip) + def setup(self, instructions=True): # Setting up Graphics - self.window = ( - self.vr if self.use_vr - else visual.Window(self.window_size, monitor="testMonitor", units="deg", - screen = self.screen_num, fullscr=self.use_fullscr)) - + if self.use_vr: + self.window = self.vr + self.display_check = self.vr.validate_frame_rate(self._draw_blank_frame) + else: + self.window = visual.Window(self.window_size, + monitor=diagnostics.build_flat_monitor(self.screen_num), + units="deg", + screen=self.screen_num, + fullscr=self.use_fullscr) + actual_hz = self.window.getActualFrameRate(nFrames=20) + self.display_check = { + 'target_hz': round(actual_hz, 1) if actual_hz else None, + 'actual_hz': round(actual_hz, 1) if actual_hz else None, + 'deviation_pct': 0.0, + 'ok': actual_hz is not None, + } + self.window.mouseVisible = False + # Loading the stimulus from the specific experiment, throws an error if not overwritten in the specific experiment self.stim = self.load_stimulus() - - # Show Instruction Screen if not skipped by the user + + # Show diagnostics screen first if anything's wrong, then instructions. if instructions: + if not self.show_diagnostics(): + return False if not self.show_instructions(): return False @@ -176,9 +200,6 @@ def show_instructions(self): if '%s' in self.instruction_text: self.instruction_text = self.instruction_text % self.duration - # Disabling the cursor during display of instructions - self.window.mouseVisible = False - # clear/reset any old key/controller events self._clear_user_input() @@ -188,13 +209,97 @@ def show_instructions(self): text = visual.TextStim(win=self.window, text=self.instruction_text, color=[-1, -1, -1]) self._draw(lambda: self.__draw_instructions(text)) - # Enabling the cursor again - self.window.mouseVisible = True + if self._user_input('cancel'): + return False + return True + + def show_diagnostics(self): + """Display a pre-experiment diagnostics screen — only when flagged. + + Shows synthetic-device warning, degraded-framerate warning, and + noisey electrode warning. If none are flagged the screen is skipped + entirely so the experimenter goes straight to the instructions. + Returns True to continue, False if the user cancels. + """ + warnings = diagnostics.format_diagnostic_warnings( + device_name=self.eeg.device_name if self.eeg else None, + display=self.display_check, + signal_check=self.signal_check, + ) + if not warnings: + return True + body = "\n\n".join(warnings) + body += "\n\nFix the issues above, or press spacebar / index trigger to continue anyway." + + self._clear_user_input() + + while not self._user_input('start'): + text = visual.TextStim( + win=self.window, text=body, + color=[1, 1, 1], font='Courier New', + height=0.04, wrapWidth=1.8, units='norm', + anchorHoriz='center', anchorVert='center', + ) + self._draw(lambda: self.__draw_instructions(text)) if self._user_input('cancel'): return False return True + def show_results(self, text): + """Display a results / summary screen after the experiment. + + Mirrors ``show_instructions``: loops the render loop until user input. Uses a + monospaced font so tabular output (e.g. recording quality reports) + aligns correctly. + + Args: + text (str): Text to display. Long lines are wrapped automatically. + """ + self._clear_user_input() + + stim = visual.TextStim( + win=self.window, text=text, + color=[1, 1, 1], # white on black background + font='Courier New', + height=0.04, + wrapWidth=1.8, + units='norm', + anchorHoriz='center', anchorVert='center', + ) + + while not self._user_input('start'): + self._draw(lambda: self.__draw_results(stim)) + if self._user_input('cancel'): + break + + def __draw_results(self, stim): + if self.use_vr and self.stereoscopic: + for eye, x_pos in [("left", self.left_eye_x_pos), + ("right", self.right_eye_x_pos)]: + self.window.setBuffer(eye) + stim.pos = (x_pos, 0) + stim.draw() + else: + stim.draw() + self.window.flip() + + def post_run(self): + """Called after the trial loop ends, before the window closes. + + Default: display a recording quality report so the experimenter can + decide whether to re-record before removing the electrodes. Override in a + subclass or reassign on the instance to replace this behaviour. + """ + if not self.save_fn: + return + try: + text = diagnostics.post_session_report(self.save_fn) + text += "\n\nPress spacebar or index trigger to close." + self.show_results(text) + except Exception as e: + print(f"[post_run] Could not display quality report: {e}") + def _user_input(self, input_type): if input_type == 'start': key_input = 'spacebar' @@ -388,6 +493,7 @@ def _report_frame_stats(self): def run(self, instructions=True): """ Run the experiment """ + self.signal_check = diagnostics.check_signal_quality(self.eeg) # Setup the experiment self.setup(instructions) @@ -426,6 +532,9 @@ def run(self, instructions=True): if self.use_vr: self.vr.save_telemetry(self.save_fn) + # Post-run hook (e.g. show a summary / quality report screen) + self.post_run() + # Closing the window self.window.close() diff --git a/eegnb/experiments/diagnostics.py b/eegnb/experiments/diagnostics.py new file mode 100644 index 000000000..4c81b126a --- /dev/null +++ b/eegnb/experiments/diagnostics.py @@ -0,0 +1,232 @@ +"""Pre- and post-experiment diagnostic checks. + +Used by ``eegnb.experiments.Experiment`` to validate the experimental setup +(display frame rate, electrode contact) before the trial loop starts, and to +summarise recording quality afterwards. + +Each function is a pure(-ish) routine that takes runtime objects and returns +a result dict or string. The Experiment class is responsible for calling them +at the right point and rendering the output. Keeping these out of +Experiment.py makes that class about *what* the experiment does rather than +*how* the setup is validated. +""" +from time import sleep +import pathlib + +import numpy as np + + +# --------------------------------------------------------------------------- +# Monitor (flat display) +# --------------------------------------------------------------------------- + +def build_flat_monitor(screen_num=0): + """Create a PsychoPy ``Monitor`` from detected screen properties. + + Avoids the 'Monitor specification not found' warning that PsychoPy emits + when a flat ``visual.Window`` can't locate a saved calibration file. + + Note: there is no equivalent ``measure_frame_rate`` for monitors — flat + displays deliver their nominal rate reliably (no encoded transport + pipeline), and PsychoPy's ``Window.getActualFrameRate`` already provides + the measurement when needed. Frame-rate validation lives on the ``VR`` + class because it's only informative where target Hz is decoupled from + actual delivery (Quest Link). + """ + import logging + from psychopy import monitors + from psychopy import logging as psy_logging + + # Temporarily elevate console logger to ERROR to suppress the + # "Monitor specification not found" warning during initialization. + if hasattr(psy_logging, 'console') and psy_logging.console: + old_level = psy_logging.console.level + psy_logging.console.setLevel(logging.ERROR) + else: + old_level = None + + try: + mon = monitors.Monitor('eegnb_auto', autoLog=False) + finally: + if old_level is not None: + psy_logging.console.setLevel(old_level) + + mon.setDistance(60) + try: + import pyglet + screen = pyglet.canvas.Display().get_screens()[screen_num] + mon.setSizePix([screen.width, screen.height]) + except Exception: + mon.setSizePix([1920, 1080]) + + # Persist the monitor specification so PsychoPy finds it on disk next time + mon.save() + return mon + + +# --------------------------------------------------------------------------- +# Pre-experiment signal quality check +# +# A brief read of the EEG amplifier's incoming signal to catch obviously +# broken channels (loose electrode, dead reference) before a session +# starts. +# +# This pre-flight check catches gross failures +# (no contact, broken wire, badly seated electrode); subtler problems +# like high-but-uniform noise or slow drift are caught by the post-session +# quality report instead. +# --------------------------------------------------------------------------- + +# Flag a channel only when both thresholds are exceeded — keeps the warning +# rate low for normal-but-noisy sessions. +SIGNAL_NOISE_FLAG_UV = 200.0 # absolute floor: nothing usable above this +SIGNAL_NOISE_REL_FACTOR = 3.0 # relative to montage median + + +def check_signal_quality(eeg, n_seconds=3): + """Read a brief EEG buffer and flag clearly broken channels. + + Used before a recording starts to catch hardware problems (loose + electrode, dead reference) before the recording begins. + The function reads ``n_seconds`` of live signal from the amplifier, + detrends each channel (1-second rolling-mean subtraction so DC drift + doesn't dominate), and computes the standard deviation as a baseline- + noise estimate. + + A channel is flagged only when its noise is BOTH: + - above ``SIGNAL_NOISE_FLAG_UV`` µV in absolute terms, AND + - more than ``SIGNAL_NOISE_REL_FACTOR`` × the group median. + + Both conditions are required so that a session where every channel is + a bit noisy doesn't trigger spurious warnings — only individually + broken channels are surfaced. + + Note: this is *not* an impedance check. Real impedance measurement + requires putting the amplifier into a dedicated test mode and is not + supported by all BrainFlow backends. Baseline noise is a proxy that + works for the common failure mode (loose / dry electrodes). + + Returns: + Dict with: + ``stds`` per-channel detrended std (µV) + ``median`` group median (µV) + ``flagged`` list of ``(channel, std_uv)`` for broken contacts + ``skipped`` True if not run (non-brainflow backend or error) + """ + result = {'stds': {}, 'median': None, 'flagged': [], 'skipped': True} + + if not eeg or getattr(eeg, 'backend', None) != 'brainflow': + return result + + try: + sfreq = int(getattr(eeg, 'sfreq', 250)) + n_samples = sfreq * n_seconds + + eeg._start_brainflow() + sleep(n_seconds) + raw = eeg.board.get_current_board_data(n_samples) + ch_names, eeg_data, _ = eeg._brainflow_extract(raw) + + # Stop so the main eeg.start() can restart cleanly later + eeg.board.stop_stream() + eeg.board.release_session() + eeg_data = np.array(eeg_data) + win = sfreq + for ch_name, x in zip(ch_names, eeg_data): + if len(x) < win: + std = float(np.std(x)) + else: + rolling = np.convolve(x, np.ones(win) / win, mode='same') + std = float(np.std(x - rolling)) + result['stds'][ch_name] = round(std, 1) + + if result['stds']: + med = float(np.median(list(result['stds'].values()))) + result['median'] = round(med, 1) + + # If the median itself is huge, the reference/ground is likely bad, + # so the relative check (3x median) will hide the noise. In this case, + # just flag anything over the absolute threshold. + bad_ref_mode = med > SIGNAL_NOISE_FLAG_UV + + for ch, s in result['stds'].items(): + if bad_ref_mode: + if s > SIGNAL_NOISE_FLAG_UV: + result['flagged'].append((ch, s)) + else: + if s > SIGNAL_NOISE_FLAG_UV and s > SIGNAL_NOISE_REL_FACTOR * med: + result['flagged'].append((ch, s)) + + result['skipped'] = False + print(f"[signal-check] {len(ch_names)} ch over {n_seconds}s — " + f"median noise = {result['median']} µV, " + f"flagged: {[c for c, _ in result['flagged']] or 'none'}") + return result + except Exception as e: + print(f"[signal-check] skipped — {e}") + return result + + +# --------------------------------------------------------------------------- +# Post-session report +# --------------------------------------------------------------------------- + +def post_session_report(save_fn): + """Build the recording quality report string for display after a session.""" + from eegnb.analysis.recording_quality import report_session + return report_session(pathlib.Path(save_fn).parent) + + +# --------------------------------------------------------------------------- +# Diagnostics screen formatting +# --------------------------------------------------------------------------- + +def format_diagnostic_warnings(*, device_name=None, display=None, signal_check=None): + """Build warnings for the pre-experiment diagnostics screen. + + Returns a list of strings — empty if everything's fine. + """ + warnings = [] + + if device_name and 'synthetic' in device_name.lower(): + warnings.append( + "[!] SYNTHETIC EEG DEVICE — NO REAL DATA WILL BE RECORDED\n" + " Set eeg_device = EEG(device, ...) in your run script before re-running." + ) + + if display and not display.get('ok', True): + warnings.append( + f"[!] DISPLAY WARNING — frame delivery severely degraded\n" + f" Target: {display['target_hz']:.0f} Hz - " + f"Measured: {display['actual_hz']:.1f} Hz " + f"({display['deviation_pct']:.1f}% off)\n" + f" Likely cause: wrong GPU selected, or GPU acceleration disabled.\n" + f" Fix: set python.exe to NVIDIA in NVIDIA Control Panel and\n" + f" Windows Graphics Settings, then restart." + ) + + if signal_check and signal_check.get('flagged'): + n_flagged = len(signal_check['flagged']) + n_total = len(signal_check.get('stds', {})) + ch_info = ", ".join(f"{ch} ({std:.0f} µV)" for ch, std in signal_check['flagged']) + + msg = ( + f"[!] SIGNAL QUALITY WARNING\n" + f" Channels with abnormally high noise: {ch_info}\n" + f" (group median is {signal_check['median']} µV)\n" + ) + + if n_total > 0 and n_flagged >= (n_total / 2.0): + msg += ( + f" Likely cause: Bad Reference (M1) or Ground (A2) connection.\n" + f" When noise is universally high across the head, the shared\n" + f" reference is usually loose or dry. Re-seat M1 and A2." + ) + else: + msg += ( + f" Likely cause: loose electrode or dry paste. Re-seat the\n" + f" listed contact(s) before continuing." + ) + warnings.append(msg) + + return warnings diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index f3dca79d5..4adfa2d46 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -13,8 +13,7 @@ ISCEV_FIELD_DEG = 16.0 ISCEV_MEAN_LUM = 0.0 -# Block conditions, indexed by label 0-3. Label encoding: bit 0 = eye, bit 1 = size class. -# CONDITIONS[label] is also (size_idx, eye_idx) flattened: size_idx = label >> 1, eye_idx = label & 1. +# Block conditions: 4 possible combinations of (eye, size) CONDITIONS = [ {'eye': 'left', 'size_name': 'large', 'size_idx': 0, 'check_deg': ISCEV_CHECK_DEG_LARGE}, {'eye': 'right', 'size_name': 'large', 'size_idx': 0, 'check_deg': ISCEV_CHECK_DEG_LARGE}, @@ -65,15 +64,24 @@ def __init__(self, eeg: Optional[EEG] = None, save_fn=None, f"Press spacebar or trigger to continue." ) - # Build and shuffle the block schedule. - block_labels = list(range(n_conditions)) * reps_per_condition - random.shuffle(block_labels) - self.block_labels = block_labels - logging.info("[PRVEP] block schedule: %s", block_labels) + # Build block schedule grouped by eye. + left_eye_blocks = [i for i, c in enumerate(CONDITIONS) if c['eye'] == 'left'] * reps_per_condition + right_eye_blocks = [i for i, c in enumerate(CONDITIONS) if c['eye'] == 'right'] * reps_per_condition + + random.shuffle(left_eye_blocks) + random.shuffle(right_eye_blocks) + + # Randomize which eye goes first + if random.random() < 0.5: + self.block_labels = left_eye_blocks + right_eye_blocks + else: + self.block_labels = right_eye_blocks + left_eye_blocks + + logging.info("[PRVEP] block schedule: %s", self.block_labels) # Expand into a per-trial parameter array. self.parameter = np.array( - [lbl for lbl in block_labels for _ in range(block_trial_size)] + [lbl for lbl in self.block_labels for _ in range(block_trial_size)] ) # ------------------------------------------------------------------ @@ -134,19 +142,30 @@ def make_checker_stim(intensity_checks, check_deg, pos): units='pix', size=stim_size_px, color='white', pos=pos, ) - # Fixation cross sized in degrees so it stays sub-check at every - # check-size variant. Clinical PR-VEP uses ~10–20 arcmin marks; 0.25° - # = 15 arcmin keeps it well below the 30 arcmin small check and the - # 60 arcmin large check, so foveal stimulation isn't masked. - FIX_SIZE_DEG = 0.25 - fix_size_px = max(2, int(round(FIX_SIZE_DEG * ppd))) + # Fixation cross: explicit '+' polygon so arm length and arm width are + # independent. At low VR ppd (~20) the old single-size ShapeStim + # rendered as a ~5 px blob that looked like a diamond and connected + # visually with nearby checkerboard corners (scintillating-grid effect). + # Arm half-length 0.3° keeps the cross inside one check cell at the + # small-check size (0.5°); arm width 0.12° gives a clearly legible + # stroke at VR ppd without occluding foveal stimulation. + FIX_ARM_DEG = 0.30 # half-length from centre to each arm tip + FIX_W_DEG = 0.12 # arm width (stroke thickness) + arm_px = max(6, int(round(FIX_ARM_DEG * ppd))) + w_px = max(2, int(round(FIX_W_DEG * ppd))) + + def _cross_verts(a, w): + h = w / 2 + return [(-h, a), (h, a), (h, h), (a, h), (a, -h), + (h, -h), (h, -a), (-h, -a), (-h, -h), (-a, -h), + (-a, h), (-h, h)] def make_fixation(pos_px): return visual.ShapeStim( win=self.window, pos=pos_px, - vertices='cross', size=fix_size_px, - units='pix', - fillColor=[1, -1, -1], lineColor=[1, -1, -1], + vertices=_cross_verts(arm_px, w_px), + units='pix', closeShape=True, + fillColor=[1, -1, -1], lineColor=[-1, -1, -1], lineWidth=1, ) self.instruction_stim = visual.TextStim( @@ -195,25 +214,50 @@ def block_eye_and_size(self, block_index: int): def present_block_instructions(self, current_block: int) -> None: open_eye, size_name = self.block_eye_and_size(current_block) closed_eye = 'right' if open_eye == 'left' else 'left' + + # Check if the eye just switched so we can prompt them to move the patch + is_first_block_for_eye = (current_block == 0) or (self.block_eye_and_size(current_block - 1)[0] != open_eye) + + patch_prompt = f"*** MOVE PATCH TO {closed_eye.upper()} EYE NOW ***\n" if is_first_block_for_eye else "" if self.use_vr: - self.instruction_stim.text = ( - f"Block {current_block + 1}/{self.n_blocks} — " - f"{open_eye} eye, {size_name} checks\n\n" - "Focus on the red dot.\n" - "Try not to blink while the squares are animating.\n" - "Press spacebar or trigger when ready." - ) - self.window.setBuffer(open_eye) - self.grey_background.draw() - self.instruction_stim.draw() - self.stim[open_eye]['fixation'].draw() - self.window.setBuffer(closed_eye) - self.black_background.draw() + # Re-assert height each call — VR state changes (calcEyePoses / + # setBuffer projection) can corrupt the cached norm-unit size on + # the shared instruction_stim, causing oversized text from block 2 + # onwards. Setting .height forces PsychoPy to recompute the glyph + # layout before draw, keeping it consistent across all blocks. + self.instruction_stim.height = 0.08 + self.instruction_stim.wrapWidth = 1.8 + for eye in ['left', 'right']: + self.window.setBuffer(eye) + + if eye == closed_eye: + self.black_background.draw() + self.instruction_stim.color = [1, 1, 1] + else: + self.grey_background.draw() + self.instruction_stim.color = [-1, -1, -1] + + self.instruction_stim.text = ( + f"Block {current_block + 1}/{self.n_blocks} — " + f"{open_eye} eye, {size_name} checks\n\n" + f"{patch_prompt}" + f"Please ensure your {closed_eye} eye is physically covered (e.g. tissue/patch),\n" + f"but keep BOTH eyes open underneath to prevent muscle artifacts.\n\n" + "Focus on the red dot.\n" + "Try not to blink while the squares are animating.\n" + "Press spacebar or trigger when ready." + ) + + self.instruction_stim.draw() + + if eye == open_eye: + self.stim[eye]['fixation'].draw() else: text = ( f"Block {current_block + 1}/{self.n_blocks}\n\n" - f"Close your {closed_eye} eye.\n" + f"{patch_prompt}" + f"Cover your {closed_eye} eye with a patch (keep both eyes open).\n" f"Focus on the red dot with your {open_eye} eye.\n" f"Check size: {size_name} ({ISCEV_CHECK_DEG_LARGE if size_name == 'large' else ISCEV_CHECK_DEG_SMALL}°)\n\n" "Press spacebar when ready." diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index 744fd803a..5b4b3ae35 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -57,12 +57,13 @@ # Electrode montage type: "cap" or "mark-iv" montage_type = "cap" -# Ground A2, Ref M1. -ch_names = ["Fz", "Pz", "P7", "P8", "O1", "O2", "Oz", "M2"] + +# Ground A2, Ref Fz. +ch_names = ["M1", "Pz", "P7", "P8", "O1", "O2", "Oz", "M2"] # Subject and session identifiers subject_id = 0 -session_nb = 10 +session_nb = 16 ################################################################################################### # Initiate EEG device @@ -73,17 +74,29 @@ #eeg_device = EEG(device="synthetic") ################################################################################################### -# Display and save path setup +# Build experiment object and detect display settings # --------------------- +# +# The experiment is constructed before the save path so the Rift session is +# already open and we can read the actual refresh rate from the runtime rather +# than hardcoding it. The save path is then built from the real Hz and set on +# the experiment before run() is called. + +pattern_reversal_vep = VisualPatternReversalVEP( + eeg=eeg_device, + use_vr=use_vr +) if use_vr: - refresh_rate = 120 - display = "quest-2_{}Hz".format(refresh_rate) + _QUEST_HZ = [72, 90, 120] # nominal Meta Quest refresh rates + _raw_hz = pattern_reversal_vep.vr.displayRefreshRate + refresh_rate = min(_QUEST_HZ, key=lambda h: abs(h - _raw_hz)) + display = f"quest-2_{refresh_rate}Hz" else: - refresh_rate = 100 - display = "acer-34-predator_{}Hz".format(refresh_rate) + refresh_rate = 100 # flat display fallback — update for your monitor + display = f"acer-34-predator_{refresh_rate}Hz" -site="{}_{}".format(display, montage_type) +site = f"{display}_{montage_type}" data_dir = getenv("DATA_DIR") save_fn = generate_save_fn(eeg_device.device_name, experiment="visual-PRVEP", @@ -91,19 +104,7 @@ subject_id=subject_id, session_nb=session_nb, data_dir=data_dir) -print(f"Saving data to: {save_fn}") +print(f"Saving data to: {save_fn} (detected {refresh_rate} Hz)") +pattern_reversal_vep.save_fn = save_fn -################################################################################################### -# Run experiment -# --------------------- -# -# Run the Pattern Reversal VEP. The experiment will present alternating checkerboard -# blocks for each eye (or for both eyes on monitor). Press spacebar/controller trigger -# at each block instruction prompt to begin that block. - -pattern_reversal_vep = VisualPatternReversalVEP( - eeg=eeg_device, - save_fn=save_fn, - use_vr=use_vr -) pattern_reversal_vep.run() diff --git a/examples/visual_vep/01r__pattern_reversal_viz.py b/examples/visual_vep/01r__pattern_reversal_viz.py index 48886527a..2cd37cb9d 100644 --- a/examples/visual_vep/01r__pattern_reversal_viz.py +++ b/examples/visual_vep/01r__pattern_reversal_viz.py @@ -1,48 +1,92 @@ +# --- +# jupyter: +# jupytext: +# formats: ipynb,py:sphinx +# text_representation: +# extension: .py +# format_name: sphinx +# format_version: '1.1' +# jupytext_version: 1.19.1 +# kernelspec: +# display_name: eeg-experiments +# language: python +# name: python3 +# --- + """ -Pattern Reversal VEP: Load and Visualize -========================================= + +# Pattern Reversal VEP: Load and Visualize This example demonstrates loading, organizing, and visualizing evoked response data from the Visual Pattern Reversal VEP (PR-VEP) experiment. An animation of a checkerboard reversal is shown (the checkerboard squares' colours are toggled once each half a second). Stimulus is rendered stereoscopically -through a Meta Quest HMD and triggered via OpenBCI Cyton. +through a Meta Quest HMD, with synchronization markers (triggers) sent to the OpenBCI Cyton. The data used is recorded using an OpenBCI Cyton with a Tencom 20 channel cap, -with cup electrodes placed at Fp1, Fp2, T5, T6, O1, O2, Oz, Pz. +with cup electrodes placed at M1 reference, Fz, Pz, P7, P8, O1, O2, Oz, M2 and an ear-clip on A2 for ground. Per-trial PC-side latency correction is applied using ``app_motion_to_photon_latency_s`` from the LibOVR compositor frame stats sidecar, and the residual Quest Link + panel lag is handled by a fixed ``link_panel_lag`` constant. + +**12 biomarkers** are computed, grouped into three sections: + +- **Pre-chiasmatic / optic nerve** (BM1–BM5): inter-ocular latency difference + (IOLD), per-size IOLD, spatial-frequency slope, amplitude ratio, bootstrap CIs. +- **Morphological** (BM6): W-peak / bifurcated P100 detection. +- **Post-chiasmatic / cortical** (BM7–BM12): hemispheric O1/O2 asymmetry, + inter-ocular Δ-asymmetry, lateral P7/P8, lateral Δ-asymmetry, composite + hemispheres, topology QC. + +Results are persisted to ``biomarkers.json`` in the recording directory and +consumed by ``02r__pattern_reversal_longitudinal.py`` for trend analysis. + """ -################################################################################################### -# Setup -# --------------------- +############################################################################### +# ## Setup +# +# import os +import json +import datetime import numpy as np import warnings warnings.filterwarnings('ignore') import matplotlib.pyplot as plt +plt.ion() import pandas as pd -from mne import Epochs, find_events, concatenate_raws +from scipy.stats import trim_mean +from scipy.signal import find_peaks + +from mne import Epochs, EvokedArray, find_events, concatenate_raws from eegnb import get_recording_dir from eegnb.analysis.utils import load_csv_as_raw -from eegnb.analysis.vep_utils import get_pr_vep_latencies +from eegnb.datasets import fetch_dataset +from eegnb.analysis.vep_utils import ( + get_pr_vep_latencies, + ISCEV_CHECK_DEG_LARGE, ISCEV_CHECK_DEG_SMALL, + IOLD_FLAG_MS, LOG2_AMP_FLAG, + trimmed_average, json_safe_float, + compute_iold, compute_iold_per_size, compute_amplitude_ratio, compute_check_size_slope, + bootstrap_p100_latency, compute_hemi_asymmetry, compute_hemi_delta_asymmetry, +) +_f = json_safe_float from eegnb.devices.utils import EEG_INDICES, SAMPLE_FREQS # sphinx_gallery_thumbnail_number = 3 -################################################################################################### -# Hardware lag definitions -# --------------------- +############################################################################### +# ## Hardware lag definitions (PsychoPy / Meta-Link path) +# # -# The total flip-return → photon delay on this rig is split into a measured +# Meta-Link path total flip-return → photon delay on this rig is split into a measured # part and an unmeasured residual: # # - **Measured per-trial (PC side)**: ``app_motion_to_photon_latency_s`` from @@ -53,56 +97,168 @@ # The Cyton RF transmission adds a further unmeasured ~1–5 ms (proprietary stack, # not standard BLE). # +# +# + +############################################################################### +# ## Stimulus calibration caveat -- Quest panel is not ISCEV-calibrated +# +# Clinical PR-VEP norms (P100 ~100 ms, ~10-20 uV at Oz-Fz on adults) are +# derived from photometrically-spec'd CRT or LCD monitors at a fixed +# viewing distance. The Quest setup deviates on the panel-photometry +# axis -- the Quest 2 fast-switching LCD is not calibrated to a specific +# cd/m^2 or contrast ratio. Cortical drive (and therefore P100 amplitude) +# scales with these, so absolute amplitudes will diverge from clinical +# norms by a constant factor. +# +# Fortunately, this is still highly effective for differential analysis! +# Because the display characteristics are stable, within-subject comparisons +# (like inter-ocular differences) remain extremely robust. Furthermore, the +# fast-switching LCD provides excellent temporal precision, yielding highly +# reliable latency measurements despite the absolute amplitude shift. +# +# Field & check size are NOT a calibration concern on this path. The +# stimulus is rendered at a runtime-derived PPD (Pixels Per Degree at +# field centre) read from the OVR runtime each session via +# ``Rift.pixelsPerTanAngleAtCenter`` -- not estimated from a spec sheet. +# IPD (Inter-Pupillary Distance, the distance between the user's pupils +# in mm) is similarly read from the runtime via ``eyeToNoseDistance`` and +# is already baked into the per-eye projection matrices PsychoPy uses, +# so it does not bias the angular extent of stimulus content. Both PPD +# and IPD are written into the ``_timing.csv`` header at session start +# (see ``log_display_info`` in ``eegnb/devices/vr.py``), and +# the stimupy checkerboard is then sized by a prescribed degrees-per-check +# value (1.0 deg = 60 arcmin = ISCEV "large", 0.25 deg = 15 arcmin = +# ISCEV "small"). Compositor barrel-distortion correction is applied +# downstream of the rendered eye-buffer texture and does not enter the +# calculation. The residual uncertainty (much smaller than a spec-sheet +# estimate) comes from eye relief -- how far the user's pupil sits from +# the lens, which slightly biases off-axis angular size and peripheral +# vignetting -- and per-unit lens manufacturing variance. Both affect +# peripheral checks more than the foveal ones that drive P100, so for +# ISCEV-relevant central-field analysis the residual is well under 1%. +# +# Expected morphology differences (to characterise as more recordings come in): +# - Larger early negative deflections (N75-ish) plausible if panel contrast +# / field size drives stronger extrastriate contribution than clinical +# norms assume. +# - Latency offset ~10-20 ms on the Meta-Link path. +# +# Absolute P100 latency / amplitude here are NOT interchangeable with +# clinical PR-VEP norms. Differential biomarkers (IOLD, slope, amplitude +# ratio) are robust to these confounds and remain interpretable. +# +# +# + +############################################################################### +# ## Bracketing / replacing ``link_panel_lag`` empirically +# +# The 25 ± 15 ms residual below is a budgeted estimate, not a measurement. +# Differential biomarkers (IOLD, slopes, ratios, Δ-asymmetry) are robust to +# this offset because both eyes share the same path, so the residual cancels +# in any L−R contrast. Absolute P100 latency (vs clinical norms) does NOT +# survive the residual and should not be reported as a clinical number until +# the residual is pinned down. Two paths to do that, in increasing order of +# rigour: +# +# 1. **Software baseline (error-prone, free).** Run a session on a control +# subject with intact optic pathways and compare the measured P100 (after +# PC-side correction only, ``link_panel_lag = 0``) to the clinical norm +# (~100 ms at 60 arcmin on a calibrated CRT). The shift between observed +# and norm is the residual. Caveats: the Quest panel isn't ISCEV-calibrated +# so contrast/luminance will perturb absolute latency by an unknown amount +# on top of the chain delay; controls vary ±5–10 ms at baseline; and any +# one subject's value is noisy. Useful to *bracket* the residual to within +# ~10 ms but not to certify it. +# +# 2. **Photodiode / optode (gold standard).** Tape a photodiode onto one HMD +# eye lens facing the panel and route its analogue output to a Cyton aux +# channel (or a second trigger line). The diode fires when actual photons +# arrive at the eye — i.e. measures the entire chain (PsychoPy flip → +# Quest Link → panel scan-out → LCD response) in a single sample. With a +# photodiode trigger present, ``link_panel_lag`` becomes 0 by construction +# and the per-trial PC-side correction is no longer needed either: +# epoching off the diode event aligns trials to actual stimulus onset +# with sub-frame precision. This makes absolute P100 latency a usable +# biomarker rather than an estimate. The native-Quest absolute-latency +# target supersedes this on its release path; for the meta-link path here, +# a diode would close the gap immediately. +# +# ############################################################################## # Center of estimated unmeasured residual range (s) link_panel_lag = 0.025 # ± half-range (s) link_panel_lag_err = 0.015 -################################################################################################### -# Load Data -# --------------------- +############################################################################### +# ## Load Data # # Load all recordings for the session and concatenate into a single raw object. # The timing sidecar CSV is parsed per-file and concatenated to match events. # -# Session 8+ timing sidecars include LibOVR perf-stat columns and a ``#``-prefixed -# ``libovr_to_wallclock_offset_s`` metadata row. Earlier sessions used a 5-column -# schema without per-trial compositor latency. -# -SESSION_NB = 9 -assert SESSION_NB >= 8, ( - f"This script assumes the session 8+ timing schema " - f"(LibOVR perf stats + libovr_to_wallclock_offset_s metadata row); got session {SESSION_NB}" -) +# --- CHANGE THESE PLACEHOLDERS TO POINT AT YOUR OWN RECORDING --------------- SUBJECT_ID = 0 +SESSION_NB = 16 DEVICE_NAME = 'cyton' EXPERIMENT = 'visual-PRVEP' DISPLAY = 'quest-2_120Hz' MONTAGE = 'cap' -SITE = f'{DISPLAY}_{MONTAGE}' +SITE = f'eegnb_examples/{DISPLAY}_{MONTAGE}' +# From session 016 the Fz cup moved to the SRB pin (hardware reference) and +# the old M1 cup moved to channel 1. Applied per-recording at load time so +# recordings with the old CSV header ('Fz') and new ('M1') can be concatenated. +CH_REMAP = {'Fz': 'M1'} if SESSION_NB >= 16 else {} +# Minimum recording duration — skips short setup/restart runs. +# Move unwanted longer recordings to bad_recordings/ in the session directory; +# the glob will not find them there. +MIN_RECORDING_SECS = 120 +# --------------------------------------------------------------------------- + +eegnb_data_path = os.path.join(os.path.expanduser('~/'), '.eegnb', 'data') +prvep_data_path = os.path.join(eegnb_data_path, EXPERIMENT, 'eegnb_examples') + +if not os.path.isdir(prvep_data_path): + print("Downloading PR-VEP example dataset from Google Drive...") + fetch_dataset(data_dir=eegnb_data_path, experiment=EXPERIMENT, site='eegnb_examples') recording_dir = get_recording_dir(DEVICE_NAME, EXPERIMENT, SUBJECT_ID, SESSION_NB, site=SITE) print(f"[data] recording dir: {recording_dir}") -# Exclude _timing.csv sidecars — they live alongside the EEG CSVs -recording_files = sorted(p for p in recording_dir.glob('*.csv') if not p.stem.endswith('_timing')) -print(f"[data] found {len(recording_files)} EEG recording(s): {[p.name for p in recording_files]}") +all_files = sorted(p for p in recording_dir.glob('*.csv') if not p.stem.endswith('_timing')) +print(f"[data] found {len(all_files)} EEG recording(s): {[p.name for p in all_files]}") -per_recording = [] -for p in recording_files: +recording_files = [] +for p in all_files: timing_path = p.with_name(p.stem + '_timing.csv') if not timing_path.exists(): - print(f"[skip] No timing sidecar for {p.name}") + print(f"[skip] No timing sidecar: {p.name}") continue + n_rows = sum(1 for _ in open(p)) - 1 + dur_secs = n_rows / 250 + if dur_secs < MIN_RECORDING_SECS: + print(f"[skip] Too short ({dur_secs:.0f}s < {MIN_RECORDING_SECS}s): {p.name}") + continue + recording_files.append(p) + +print(f"[data] using {len(recording_files)} recording(s): {[p.name for p in recording_files]}") + +per_recording = [] +for p in recording_files: + timing_path = p.with_name(p.stem + '_timing.csv') rec_raw = load_csv_as_raw([str(p)], sfreq=250, ch_ind=EEG_INDICES['cyton'], aux_ind=None, replace_ch_names=None, verbose=False) - rec_timing = pd.read_csv(timing_path, comment='#').reset_index(drop=True) + if CH_REMAP: + remap = {k: v for k, v in CH_REMAP.items() if k in rec_raw.ch_names} + if remap: + rec_raw.rename_channels(remap) + rec_timing = pd.read_csv(timing_path, comment='#').reset_index(drop=True) rec_events = find_events(rec_raw, shortest_event=1, verbose=False) n = min(len(rec_events), len(rec_timing)) @@ -117,8 +273,7 @@ if not per_recording: raise RuntimeError( f"No recordings loaded from {recording_dir}. " - "Check SUBJECT_ID, SESSION_NB, and DEVICE_NAME are correct, " - "and that each EEG CSV has a matching _timing.csv sidecar." + "Check SUBJECT_ID, SESSION_NB, DEVICE_NAME, and MIN_RECORDING_SECS." ) raw, events = concatenate_raws( @@ -131,15 +286,46 @@ print(f"\n[raw] sfreq={raw.info['sfreq']} Hz, n_samples={raw.n_times}, duration={raw.times[-1]:.1f}s") print(f"[raw] channels: {raw.ch_names}") -################################################################################################### -# Visualize the power spectrum -# ---------------------------- +############################################################################### +# ## Recording quality diagnostic +# +# Two-stage contact quality check: +# +# 1. **Raw CSV (here)** — std / drift / p99 per channel directly from the recorded CSV, before any MNE processing. Mean-subtracts before computing metrics so DC offset does not inflate the flags. Detects whether flagged channels are isolated contacts or shared across all channels (loose M1/SRB reference). +# 2. **Post-epoch baseline (below, after epoching)** — pre-stimulus baseline RMS per channel after filtering + referencing. Absolute values are interpretable here; provides SNR at Oz and a go/no-go recommendation. + +import sys, pathlib +sys.path.insert(0, str(pathlib.Path(globals()['_dh'][0]).resolve().parents[3])) +from eegnb.analysis.recording_quality import check_session + +_rq = check_session(recording_dir) +print(_rq['report']) + +if _rq['shared_ref_suspect']: + print() + print("=" * 60) + print("⚑ SHARED REFERENCE SUSPECT (M1/SRB loose)") + print(" All-channel noise inflation detected.") + print(" Every channel recorded through this reference is") + print(" compromised. Biomarkers that depend on absolute") + print(" amplitude or inter-channel ratios are unreliable.") + print(" Re-seat M1 and re-record before trusting results.") + print("=" * 60) +elif _rq['flagged_channels']: + print(f"\n⚑ Flagged channels: {', '.join(_rq['flagged_channels'])}") + print(" Isolated contact issue(s) — other channels are ok.") +else: + print("\nAll channels within normal range — contact quality ok.") + +############################################################################### +# ## Visualize the power spectrum +# +# raw.plot_psd() -################################################################################################### -# Filtering -# ---------------------------- +############################################################################### +# ## Filtering # # Use FIR (linear phase) rather than IIR to avoid frequency-dependent group delay, # which would shift the P100 peak by an amount that depends on its spectral content, @@ -147,14 +333,14 @@ # delay so the filtered P100 sits at the same sample as the unfiltered one. # Using ISCEV bandpass standard: 1–100 Hz. # +# +# hp, lp = 1, 100 raw.filter(hp, lp, method='fir') -raw.plot_psd(fmin=hp, fmax=lp) -################################################################################################### -# Per-trial PC-side photon-latency correction -# --------------------- +############################################################################### +# ## Per-trial PC-side photon-latency correction # # Each event sample index is shifted by the per-trial measured # ``app_motion_to_photon_latency_s`` from LibOVR frame stats — a retrospective @@ -163,6 +349,8 @@ # Missing trials (typically the first frame or two before perf stats are populated) # fall back to the session mean. # +# +# pc_lag_s = timing_df['app_motion_to_photon_latency_s'].values.astype(float) valid = np.isfinite(pc_lag_s) & (pc_lag_s > 0) @@ -184,9 +372,10 @@ events_corrected = events.copy() events_corrected[:, 0] += sample_shifts -################################################################################################### -# Hardware lag breakdown chart -# ---------------------------- +############################################################################### +# ## Hardware lag breakdown chart +# +# pc_pipeline_lag = pc_lag_s.mean() * 1000 unmeasured_lag = link_panel_lag * 1000 @@ -215,95 +404,315 @@ ncol=2, fontsize=8, frameon=True) fig_lag.subplots_adjust(bottom=0.38) -################################################################################################### -# Epoching -# ---------------------------- +############################################################################### +# ## Condition decoding # -# Epoch around stimulus onsets, separating left- and right-eye trials. -# Epochs are shifted by ``link_panel_lag`` to account for the residual hardware lag. +# Marker scheme. Two recording-format generations exist: # +# v1 (legacy): reversal codes carry only eye (1 = left, 2 = right). Size +# must be recovered from the surrounding block-start marker (100–103). +# v2 (current): reversal codes carry both eye and size (1–4), matching the +# block-start codes 1:1. Block-start markers are still pushed but are +# now redundant for recoding. +# +# Block-start codes (unchanged across versions): +# 100 = left/large, 101 = right/large, 102 = left/small, 103 = right/small +# +# Target condition codes (== v2 reversal codes; v1 is recoded into this space): +COND_TO_INT = { + ('left_eye', 'large'): 1, + ('right_eye', 'large'): 2, + ('left_eye', 'small'): 3, + ('right_eye', 'small'): 4, +} +BLOCK_START_CODES = { + 100: ('left_eye', 'large'), + 101: ('right_eye', 'large'), + 102: ('left_eye', 'small'), + 103: ('right_eye', 'small'), +} + +# Detect format from the codes actually present in the recording. +reversal_codes_present = set(events[:, 2]) - set(BLOCK_START_CODES) +is_v2 = bool(reversal_codes_present - {1, 2}) # any code > 2 ⇒ v2 +print(f"[events] marker scheme detected: {'v2 (per-condition reversals)' if is_v2 else 'v1 (eye-only reversals, recoding via block-start)'}") -event_id = {'left_eye': 1, 'right_eye': 2} -print(f"\n[events] total={len(events)}, " - f"left_eye={int((events[:, 2] == 1).sum())}, " - f"right_eye={int((events[:, 2] == 2).sum())}") +# Walk the raw event array; emit one fully-labeled reversal per input reversal. +recoded = [] +recoded_corr = [] +cur_cond = None +for (samp, _, code), (samp_corr, _, _) in zip(events, events_corrected): + if code in BLOCK_START_CODES: + cur_cond = COND_TO_INT[BLOCK_START_CODES[code]] + elif is_v2 and code in COND_TO_INT.values(): + recoded.append([samp, 0, code]) + recoded_corr.append([samp_corr, 0, code]) + elif (not is_v2) and code in (1, 2) and cur_cond is not None: + recoded.append([samp, 0, cur_cond]) + recoded_corr.append([samp_corr, 0, cur_cond]) + +recoded_events = (np.array(recoded, dtype=int) + if recoded else np.zeros((0, 3), dtype=int)) +events_corrected = (np.array(recoded_corr, dtype=int) + if recoded_corr else np.zeros((0, 3), dtype=int)) + +# Keep backward-compat alias so later cells can use `events` for per-trial lag. +events = recoded_events + +############################################################################### +# ## Epoching parameters +# + +event_id = {f"{eye}/{size}": code for (eye, size), code in COND_TO_INT.items()} +for cond, cid in event_id.items(): + n = int((recoded_events[:, 2] == cid).sum()) + print(f"[events] {cond}: {n}") PICK_CH = 'Oz' # ISCEV-standard electrode -REJECT_UV = 35e-6 +HEMI_CHANNELS = ['O1', 'O2'] # Hemispheric channels for post-chiasmatic analysis +LATERAL_CHANNELS = ['P7', 'P8'] # Lateral extrastriate (V2/V3/MT). Generators on the + # lateral cortical surface project mostly ipsilaterally + # to the scalp, so P7/P8 are far less affected by the + # paradoxical lateralization that makes O1/O2 ambiguous + # for hemispheric localization. This makes P7/P8 a + # relatively direct readout of unilateral lateral- + # occipital / parieto-occipital cortex — useful for + # detecting localized retro-chiasmatic / extrastriate + # involvement (cortical lesions, focal hypofunction) + # that Oz / O1 / O2 alone cannot cleanly side-localize. +# Topology QC channels: Pz gradient + Fz Halliday inversion. Fz is absent +# when it is the hardware reference (session 016+), so filter against what's +# actually recorded to avoid pick errors downstream. +TOPOLOGY_CHANNELS = [ch for ch in ['Pz', 'Fz'] if ch in raw_ref.ch_names] +ALL_PICK_CHANNELS = [PICK_CH] + HEMI_CHANNELS + LATERAL_CHANNELS + TOPOLOGY_CHANNELS +REJECT_UV = 150e-6 BASELINE = (-0.1, 0) -ch_epochs = Epochs(raw, events=events, event_id=event_id, +LANDMARK_MS = [75, 100, 145] # N75, P100, N145 +LANDMARK_COLORS = ['#888888', 'green', '#555555'] +LANDMARK_LABELS = ['N75 (75 ms)', 'P100 (100 ms)', 'N145 (145 ms)'] + +P100_WIN_MS = (60, 160) # P100 search window (positive max) +CHECK_SIZE_ARCMIN = { + 'large': ISCEV_CHECK_DEG_LARGE * 60.0, # 60 arcmin + 'small': ISCEV_CHECK_DEG_SMALL * 60.0, # 15 arcmin +} + +############################################################################### +# ## Reference scheme selector +# +# Pick which EEG reference to analyse in this notebook run. Re-run the notebook +# with the other value to also persist its biomarkers (the persistence cell at +# the bottom merges into ``biomarkers.json`` rather than overwriting). +# +# - **Fz (ISCEV strict)**: Oz-Fz derivation. The ISCEV 2016 PR-VEP standard +# recommends a mid-frontal reference (Fz), so this scheme is the choice for +# direct comparison against published clinical norms. Trade-off: very +# sensitive to Fz contact quality on dry-electrode rigs -- one bad Fz +# contact can subtract artifact into Oz and invert P100 polarity. +# - **Linked Mastoid M1+M2**: ISCEV lists ear/mastoid as an acceptable +# alternative reference; widely used in cognitive-neuroscience ERP work +# because mastoids sit on bony prominence with less EMG and are far less +# contact-noise-prone than Fz on dry actives. Absolute P100 latency / +# amplitude differ slightly from the Fz-referenced waveform, so direct +# comparison to Fz-referenced clinical norms is approximate; differential +# biomarkers (IOLD, slope, asymmetry) are reference-invariant and remain +# directly comparable. Required (not optional) for Biomarker 12's Halliday +# Fz-inversion check, which needs Fz as a recorded channel rather than the +# reference. +# +# M1 is the Cyton hardware reference (SRB pin), so stored channel data is +# already relative to M1. A zero-valued M1 channel is synthesised and averaged +# with the recorded M2, giving Oz-(M1+M2)/2 after the algebra. +# + +REF_SCHEME = 'Fz (ISCEV)' # 'Fz (ISCEV)' or 'Linked Mastoid M1+M2' + +if REF_SCHEME == 'Fz (ISCEV)': + raw_ref = raw.copy() + if 'Fz' in raw_ref.ch_names: + # Fz is a recorded channel — subtract it as software reference + raw_ref.set_eeg_reference(ref_channels=['Fz']) + else: + # Fz is the hardware SRB — data already in Fz space, no software step needed + print("[ref] Fz is hardware reference — no software re-reference applied") +elif REF_SCHEME == 'Linked Mastoid M1+M2': + raw_ref = raw.copy() + if 'M1' not in raw_ref.ch_names: + # M1 is the SRB (hardware reference) — synthesise it as zero so the + # algebra (channel − M2/2) approximates linked mastoid + m1_zero = raw_ref.copy().pick(['M2']) + m1_zero._data[:] = 0 + m1_zero.rename_channels({'M2': 'M1'}) + raw_ref.add_channels([m1_zero]) + # M1 is a real recorded channel (session 016+) or the synthesised zero above + raw_ref.set_eeg_reference(ref_channels=['M1', 'M2']) +else: + raise ValueError(f'Unknown REF_SCHEME: {REF_SCHEME!r}') + +ref_label = REF_SCHEME +results = {'ref_label': ref_label} +print(f"\n{'='*60}\nReference: {ref_label}\n{'='*60}") + +raw_ref.compute_psd(fmin=hp, fmax=lp).plot() + +############################################################################### +# ## Epoching +# + +ch_epochs = Epochs(raw_ref, events=recoded_events, event_id=event_id, tmin=-0.1, tmax=0.4, baseline=BASELINE, reject={'eeg': REJECT_UV}, - preload=True, verbose=False, picks=[PICK_CH], - metadata=timing_df, + preload=True, verbose=False, picks=ALL_PICK_CHANNELS, event_repeated='drop') ch_epochs.shift_time(-link_panel_lag) -n_left = len(ch_epochs['left_eye']) -n_right = len(ch_epochs['right_eye']) -n_total = n_left + n_right -drop_pct = (1 - n_total / len(events)) * 100 -print(f"\n[{PICK_CH} epochs] reject ptp = {REJECT_UV * 1e6:.0f} uV") -print(f" kept {n_total}/{len(events)} " - f"(left={n_left}, right={n_right}) drop={drop_pct:.1f}%") +n_total = len(ch_epochs) +drop_pct = (1 - n_total / len(recoded_events)) * 100 +print(f"\n[{PICK_CH}] reject ptp={REJECT_UV * 1e6:.0f} uV " + f"kept {n_total}/{len(recoded_events)} ({drop_pct:.1f}% dropped)") +results['n_trials_total'] = int(len(recoded_events)) +results['n_trials_kept'] = int(n_total) +results['drop_pct'] = _f(drop_pct) +results['n_per_condition'] = { + cond: int((recoded_events[:, 2] == cid).sum()) for cond, cid in event_id.items() +} -# Corrected-events epochs on the same trial set for overlay. -ch_epochs_corr = Epochs(raw, events=events_corrected[ch_epochs.selection], +# Corrected-events epochs on the same kept trials. +ch_epochs_corr = Epochs(raw_ref, events=events_corrected[ch_epochs.selection], event_id=event_id, tmin=-0.1, tmax=0.4, baseline=BASELINE, - reject=None, preload=True, verbose=False, picks=[PICK_CH], - metadata=timing_df.iloc[ch_epochs.selection].reset_index(drop=True), + reject=None, preload=True, verbose=False, picks=ALL_PICK_CHANNELS, event_repeated='drop') ch_epochs_corr.shift_time(-link_panel_lag) -################################################################################################### -# Oz evoked response: Left Eye vs Right Eye -# ----------------------------------------- +def avg_eyes(ep, eye_prefix): + keys = [k for k in event_id if k.startswith(eye_prefix)] + return trimmed_average(ep[keys]) if keys else None + +# ========================================================================= +# WAVEFORM PLOTS +# ========================================================================= + +"" +############################################################################### +# Stage 2 — Post-epoch baseline quality (filtered + referenced) +# Absolute values are meaningful here. Baseline window: -100 to 0 ms. +############################################################################### + +BASELINE_WIN = (-0.1, 0.0) +NOISE_FACTOR_EP = 1.5 # flag if channel baseline RMS > this × group median +OZ_SNR_MIN = 2.0 # flag if Oz P100 SNR falls below this + +baseline_mask = (ch_epochs_corr.times >= BASELINE_WIN[0]) & \ + (ch_epochs_corr.times <= BASELINE_WIN[1]) + +baseline_data = ch_epochs_corr.get_data()[:, :, baseline_mask] # (epochs, ch, times) +baseline_rms = np.sqrt(np.mean(baseline_data ** 2, axis=(0, 2))) * 1e6 # µV per channel + +ch_names_ep = ch_epochs_corr.ch_names +med_rms = float(np.median(baseline_rms)) + +print("Stage 2 — Baseline RMS per channel (post-filter, post-reference, -100–0 ms)") +print(f"{'Channel':<8} {'RMS µV':>8} {'Factor':>8} Status") +print("-" * 44) +quality_flags = {} +for ch, rms in zip(ch_names_ep, baseline_rms): + factor = rms / med_rms + flag = factor > NOISE_FACTOR_EP + quality_flags[ch] = {'rms_uv': round(float(rms), 2), 'flag': flag} + print(f"{ch:<8} {rms:>8.2f} {factor:>8.2f} {'⚑ FLAG' if flag else 'ok'}") + +# Oz SNR: best detected P100 / Oz baseline RMS +oz_idx = ch_names_ep.index('Oz') +oz_rms = baseline_rms[oz_idx] +best_p100_uv = max( + (abs(p['amplitude']) * 1e6 for p in [p100_left, p100_right] if p is not None), + default=None +) +print(f"\nOz baseline RMS = {oz_rms:.2f} µV group median = {med_rms:.2f} µV") +if best_p100_uv is not None: + oz_snr = best_p100_uv / oz_rms + snr_ok = oz_snr >= OZ_SNR_MIN + print(f"Oz P100 SNR = {oz_snr:.2f} (recommended ≥ {OZ_SNR_MIN}) " + f"[{'ok' if snr_ok else '⚑ LOW — collect more trials'}]") +else: + print("Oz SNR: cannot compute — P100 not detected at Oz") + +flagged_chs = [ch for ch, v in quality_flags.items() if v['flag']] +if flagged_chs: + print(f"\n⚑ Noisy channels (>{NOISE_FACTOR_EP}× median): {flagged_chs}") + if len(flagged_chs) == len(ch_names_ep): + print(" All channels elevated → shared reference (M2/SRB) is likely the cause.") + else: + print(" Subset of channels → individual electrode contact issue(s).") +else: + print(f"\nAll channels within {NOISE_FACTOR_EP}× median baseline — contact quality ok.") + +############################################################################### +# ## Oz evoked: left vs right eye # # Solid lines: per-trial PC lag corrected. Dotted lines: mean-corrected baseline. # Shaded regions: ±1 SEM across trials. # -from scipy.ndimage import maximum_filter1d, minimum_filter1d +evoked_left_large = trimmed_average(ch_epochs['left_eye/large']) +evoked_right_large = trimmed_average(ch_epochs['right_eye/large']) +evoked_left_small = trimmed_average(ch_epochs['left_eye/small']) +evoked_right_small = trimmed_average(ch_epochs['right_eye/small']) -evoked_left = ch_epochs['left_eye'].average(picks=[PICK_CH]) -evoked_right = ch_epochs['right_eye'].average(picks=[PICK_CH]) +idx_oz = evoked_left_large.ch_names.index(PICK_CH) -times = evoked_left.times * 1000 -left_data = evoked_left.data[0] * 1e6 -right_data = evoked_right.data[0] * 1e6 +times = evoked_left_large.times * 1000 +left_data_large = evoked_left_large.data[idx_oz] * 1e6 +right_data_large = evoked_right_large.data[idx_oz] * 1e6 +left_data_small = evoked_left_small.data[idx_oz] * 1e6 +right_data_small = evoked_right_small.data[idx_oz] * 1e6 -LANDMARK_MS = [75, 100, 145] # N75, P100, N145 -LANDMARK_COLORS = ['#888888', 'green', '#555555'] -LANDMARK_LABELS = ['N75 (75 ms)', 'P100 (100 ms)', 'N145 (145 ms)'] - -sfreq = evoked_left.info['sfreq'] times_mean_corr = times - (pc_lag_s.mean() * 1000) -evoked_left_corr = ch_epochs_corr['left_eye'].average(picks=[PICK_CH]) -evoked_right_corr = ch_epochs_corr['right_eye'].average(picks=[PICK_CH]) -left_corr = evoked_left_corr.data[0] * 1e6 -right_corr = evoked_right_corr.data[0] * 1e6 +evoked_left_corr_large = trimmed_average(ch_epochs_corr['left_eye/large']) +evoked_right_corr_large = trimmed_average(ch_epochs_corr['right_eye/large']) +left_corr_large = evoked_left_corr_large.data[idx_oz] * 1e6 +right_corr_large = evoked_right_corr_large.data[idx_oz] * 1e6 + +evoked_left_corr_small = trimmed_average(ch_epochs_corr['left_eye/small']) +evoked_right_corr_small = trimmed_average(ch_epochs_corr['right_eye/small']) +left_corr_small = evoked_left_corr_small.data[idx_oz] * 1e6 +right_corr_small = evoked_right_corr_small.data[idx_oz] * 1e6 + +left_trials_large = ch_epochs_corr['left_eye/large'].get_data(picks=[PICK_CH])[:, 0, :] * 1e6 +right_trials_large = ch_epochs_corr['right_eye/large'].get_data(picks=[PICK_CH])[:, 0, :] * 1e6 +left_sem_large = left_trials_large.std(axis=0) / np.sqrt(len(left_trials_large)) +right_sem_large = right_trials_large.std(axis=0) / np.sqrt(len(right_trials_large)) -left_trials = ch_epochs_corr['left_eye'].get_data(picks=[PICK_CH])[:, 0, :] * 1e6 -right_trials = ch_epochs_corr['right_eye'].get_data(picks=[PICK_CH])[:, 0, :] * 1e6 -left_sem = left_trials.std(axis=0) / np.sqrt(len(left_trials)) -right_sem = right_trials.std(axis=0) / np.sqrt(len(right_trials)) +left_trials_small = ch_epochs_corr['left_eye/small'].get_data(picks=[PICK_CH])[:, 0, :] * 1e6 +right_trials_small = ch_epochs_corr['right_eye/small'].get_data(picks=[PICK_CH])[:, 0, :] * 1e6 +left_sem_small = left_trials_small.std(axis=0) / np.sqrt(len(left_trials_small)) +right_sem_small = right_trials_small.std(axis=0) / np.sqrt(len(right_trials_small)) -# Detect and report P100 peak latencies -n75_left, p100_left, n145_left = get_pr_vep_latencies(evoked_left_corr) -n75_right, p100_right, n145_right = get_pr_vep_latencies(evoked_right_corr) +# Size-averaged evokeds used as primary input for most biomarkers. +evoked_left_corr_avg = avg_eyes(ch_epochs_corr, 'left_eye') +evoked_right_corr_avg = avg_eyes(ch_epochs_corr, 'right_eye') +n75_left, p100_left, n145_left = get_pr_vep_latencies(evoked_left_corr_avg.copy().pick([PICK_CH])) +n75_right, p100_right, n145_right = get_pr_vep_latencies(evoked_right_corr_avg.copy().pick([PICK_CH])) -def print_peak_info(eye_name, peak_info): - if peak_info is not None: - latency_ms = round(peak_info['latency'] * 1e3, 2) - uv = round(peak_info['amplitude'] * 1e6, 2) - print(f"[{eye_name}] {peak_info['name']} Peak: {uv} µV at {latency_ms} ms (ch={peak_info['channel']})") +for eye_name, peaks in [('Left Eye (Avg)', (n75_left, p100_left, n145_left)), + ('Right Eye (Avg)', (n75_right, p100_right, n145_right))]: + for peak in peaks: + if peak is not None: + print(f"[{eye_name}] {peak['name']} Peak: " + f"{round(peak['amplitude']*1e6, 2)} µV at " + f"{round(peak['latency']*1e3, 2)} ms (ch={peak['channel']})") -for eye, peaks in [('Left Eye', (n75_left, p100_left, n145_left)), - ('Right Eye', (n75_right, p100_right, n145_right))]: - for p in peaks: - print_peak_info(eye, p) + n75, p100, n145 = peaks + if n75 is not None and p100 is not None: + ptp_1 = (p100['amplitude'] - n75['amplitude']) * 1e6 + print(f"[{eye_name}] N75-P100 Peak-to-Peak: {ptp_1:.2f} µV") + if p100 is not None and n145 is not None: + ptp_2 = (p100['amplitude'] - n145['amplitude']) * 1e6 + print(f"[{eye_name}] P100-N145 Peak-to-Peak: {ptp_2:.2f} µV") + if n75 is not None and p100 is not None and n145 is not None: + print(f"[{eye_name}] Total N75-P100-N145 Energy: {ptp_1 + ptp_2:.2f} µV") def plot_ch(ax, data, color, eye_label, sem=None, data_mean_corr=None, times_mean_corr=None): ax.plot(times, data, color=color, linewidth=2, label=f'{eye_label} (Per-trial corrected)') @@ -319,19 +728,1309 @@ def plot_ch(ax, data, color, eye_label, sem=None, data_mean_corr=None, times_mea ax.axhline(y=0, color='black', linestyle='-', alpha=0.3) ax.axvline(x=0, color='black', linestyle='--', alpha=0.5) -fig, ax = plt.subplots(figsize=(10, 6)) +fig, (ax_large, ax_small) = plt.subplots(1, 2, figsize=(16, 6), sharey=True) + +plot_ch(ax_large, left_corr_large, 'blue', 'Left Eye', sem=left_sem_large, + data_mean_corr=left_data_large, times_mean_corr=times_mean_corr) +plot_ch(ax_large, right_corr_large, 'red', 'Right Eye', sem=right_sem_large, + data_mean_corr=right_data_large, times_mean_corr=times_mean_corr) + +for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax_large.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) + +ax_large.set_title(f'[{ref_label}] Large Checks: Left vs Right Eye — {PICK_CH}') +handles, lbls = ax_large.get_legend_handles_labels() +ax_large.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), + fontsize=10, loc='upper right') -plot_ch(ax, left_corr, 'blue', 'Left Eye', sem=left_sem, - data_mean_corr=left_data, times_mean_corr=times_mean_corr) -plot_ch(ax, right_corr, 'red', 'Right Eye', sem=right_sem, - data_mean_corr=right_data, times_mean_corr=times_mean_corr) +plot_ch(ax_small, left_corr_small, 'blue', 'Left Eye', sem=left_sem_small, + data_mean_corr=left_data_small, times_mean_corr=times_mean_corr) +plot_ch(ax_small, right_corr_small, 'red', 'Right Eye', sem=right_sem_small, + data_mean_corr=right_data_small, times_mean_corr=times_mean_corr) for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) + ax_small.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) + +ax_small.set_title(f'[{ref_label}] Small Checks: Left vs Right Eye — {PICK_CH}') +handles, lbls = ax_small.get_legend_handles_labels() +ax_small.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), + fontsize=10, loc='upper right') -ax.set_title(f'Evoked P100 Response: Left vs Right Eye (PC Lag Corrected) — {PICK_CH}') -handles, labels = ax.get_legend_handles_labels() -by_label = dict(zip(labels, handles)) -ax.legend(by_label.values(), by_label.keys(), fontsize=10, loc='upper right') fig.tight_layout() plt.show() + +############################################################################### +# ## Occipital channel comparison (Oz, O1, O2) — size-averaged per eye +# +# O1/O2 alongside Oz on the same axes. Subject0000 has a larger right occipital +# lobe that crosses the midline. Due to paradoxical lateralization (right V1 +# dipole projects to left scalp), this predicts O1 > O2 amplitude as a +# baseline anatomical effect independent of pathology. Confirming this here +# separates the structural asymmetry from any eye-dependent lesion signal. +# + +fig_o1o2, axes_o1o2 = plt.subplots(1, 2, figsize=(16, 6), sharey=True) +occ_styles = { + 'Oz': dict(color='black', lw=2.5, ls='-', alpha=1.0), + 'O1': dict(color='#9467bd', lw=1.8, ls='--', alpha=0.85), + 'O2': dict(color='#e377c2', lw=1.8, ls='--', alpha=0.85), +} + +for ax, (eye_name, ev_avg) in zip(axes_o1o2, + [('Left Eye', evoked_left_corr_avg), + ('Right Eye', evoked_right_corr_avg)]): + if ev_avg is None: + continue + t_occ = ev_avg.times * 1000 + for ch, style in occ_styles.items(): + if ch not in ev_avg.ch_names: + continue + idx = ev_avg.ch_names.index(ch) + ax.plot(t_occ, ev_avg.data[idx] * 1e6, label=ch, **style) + + for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax.axvline(ms, color=col, linestyle='--', alpha=0.5, + label=lbl if ax == axes_o1o2[0] else '') + ax.set_title(f'[{ref_label}] Occipital channels — {eye_name} (size-averaged)') + ax.set_xlabel('Time (ms)') + ax.axhline(0, color='black', alpha=0.3) + ax.axvline(0, color='black', linestyle='--', alpha=0.5) + if ax == axes_o1o2[0]: + ax.set_ylabel('Amplitude (µV)') + ax.grid(True, alpha=0.3) + handles, lbls = ax.get_legend_handles_labels() + ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), + fontsize=10, loc='upper right') + +fig_o1o2.tight_layout() +plt.show() + +############################################################################### +# ## Inter-ocular difference wave at Oz +# +# The full time course of the L−R contrast. Surfaces morphology effects that +# single-point biomarkers miss: delayed second peaks on the affected eye, +# split / W-shaped P100 from partially demyelinated fibres, broadening of +# the P100. Zero baseline = eyes match; sign convention follows IOLD (positive +# = left-eye delay near the P100 peak). +# + +fig_diff, (ax_diff_large, ax_diff_small) = plt.subplots(1, 2, figsize=(16, 6), sharey=True) + +for ax, size_label, l_data, r_data in [ + (ax_diff_large, 'Large', left_corr_large, right_corr_large), + (ax_diff_small, 'Small', left_corr_small, right_corr_small), +]: + diff = l_data - r_data + ax.plot(times, l_data, color='blue', alpha=0.25, linewidth=1.2, label='Left Eye') + ax.plot(times, r_data, color='red', alpha=0.25, linewidth=1.2, label='Right Eye') + ax.plot(times, diff, color='#7d3c98', linewidth=2.5, label='L − R difference') + ax.fill_between(times, 0, diff, color='#7d3c98', alpha=0.15) + + for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) + + ax.set_title(f'[{ref_label}] {size_label} Checks: L − R Difference Wave — {PICK_CH}') + ax.set_xlabel('Time (ms)') + ax.set_ylabel('Amplitude (µV)') + ax.grid(True, alpha=0.3) + ax.axhline(0, color='black', alpha=0.3) + ax.axvline(0, color='black', linestyle='--', alpha=0.5) + handles, lbls = ax.get_legend_handles_labels() + ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), + fontsize=10, loc='upper right') + +fig_diff.tight_layout() +plt.show() + +############################################################################### +# ## Diagnostic: jitter-correction impact +# +# Compares the P100 sharpness with and without per-trial PC lag correction. +# + +evoked_left_uncorr = avg_eyes(ch_epochs, 'left_eye') +evoked_right_uncorr = avg_eyes(ch_epochs, 'right_eye') + +if all(x is not None for x in [evoked_left_corr_avg, evoked_right_corr_avg, + evoked_left_uncorr, evoked_right_uncorr]): + fig_jitter, axes_j = plt.subplots(1, 2, figsize=(16, 6), sharey=True) + + for ax, eye_name, ev_u, ev_c, color in zip( + axes_j, ['Left Eye', 'Right Eye'], + [evoked_left_uncorr, evoked_right_uncorr], + [evoked_left_corr_avg, evoked_right_corr_avg], + ['blue', 'red'] + ): + t_u = ev_u.times * 1000 + t_c = ev_c.times * 1000 + i_oz = ev_u.ch_names.index(PICK_CH) + + ax.plot(t_u, ev_u.data[i_oz] * 1e6, color='gray', linestyle='--', linewidth=2, + label='Uncorrected') + ax.plot(t_c, ev_c.data[i_oz] * 1e6, color=color, linewidth=2, + label='PC-lag corrected') + + for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax.axvline(x=ms, color=col, linestyle=':', alpha=0.5, + label=lbl if ax == axes_j[0] else '') + + ax.set_title(f'[{ref_label}] {eye_name}: Jitter Correction Impact — {PICK_CH}') + ax.set_xlabel('Time (ms)') + if ax == axes_j[0]: + ax.set_ylabel('Amplitude (µV)') + ax.axhline(0, color='black', alpha=0.3) + ax.axvline(0, color='black', linestyle='--', alpha=0.5) + handles, lbls = ax.get_legend_handles_labels() + ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), + loc='upper right') + + fig_jitter.tight_layout() + plt.show() + +############################################################################### +# ## Diagnostic: estimator robustness +# +# Overlays single trials to reveal outlier contamination (e.g., blinks), then +# compares standard mean, median, and 10%-trimmed mean estimators. +# + +fig_est, axes_e = plt.subplots(1, 2, figsize=(16, 6), sharey=True) + +for ax, eye_prefix, color in zip(axes_e, ['left_eye', 'right_eye'], ['blue', 'red']): + keys = [k for k in event_id if k.startswith(eye_prefix)] + if not keys: + continue + + ep = ch_epochs_corr[keys].copy().pick([PICK_CH]) + data = ep.get_data() * 1e6 + if data.shape[0] == 0: + continue + + data = data[:, 0, :] + times_e = ep.times * 1000 + + subset = data[:100] if data.shape[0] > 100 else data + for trial in subset: + ax.plot(times_e, trial, color='gray', alpha=0.08, linewidth=0.5) + + ax.plot(times_e, np.mean(data, axis=0), color='orange', linestyle='--', + linewidth=2, label='Standard mean') + ax.plot(times_e, np.median(data, axis=0), color='green', linestyle='-.', + linewidth=2, label='Median') + ax.plot(times_e, trim_mean(data, 0.1, axis=0), color=color, + linewidth=3, label='10% Trimmed mean') + + for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax.axvline(x=ms, color=col, linestyle=':', alpha=0.5, + label=lbl if ax == axes_e[0] else '') + + ax.set_title(f'[{ref_label}] {eye_prefix.replace("_", " ").title()}: ' + f'Single Trials & Estimators — {PICK_CH}') + ax.set_xlabel('Time (ms)') + if ax == axes_e[0]: + ax.set_ylabel('Amplitude (µV)') + ax.set_ylim(-30, 30) + ax.axhline(0, color='black', alpha=0.3) + ax.axvline(0, color='black', linestyle='--', alpha=0.5) + handles, lbls = ax.get_legend_handles_labels() + ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), + loc='upper right') + +fig_est.tight_layout() +plt.show() + +############################################################################### +# ## Diagnostic: multi-channel topography +# +# Displays the trimmed-mean waveform across all posterior channels to confirm +# the Oz > O1/O2 > Pz generator gradient expected from a V1 source. +# + +fig_mc, axes_mc = plt.subplots(1, 2, figsize=(16, 6), sharey=True) + +plot_channels = [ch for ch in ['Oz', 'O1', 'O2', 'P7', 'P8', 'Pz'] + if ch in ch_epochs_corr.ch_names] +ch_colors = {'Oz': 'black', 'O1': '#9467bd', 'O2': '#e377c2', + 'P7': '#1f77b4', 'P8': '#d62728', 'Pz': '#2ca02c'} + +for ax, eye_name, ev_avg in zip(axes_mc, ['Left Eye', 'Right Eye'], + [evoked_left_corr_avg, evoked_right_corr_avg]): + if ev_avg is None: + continue + + t_mc = ev_avg.times * 1000 + for ch in plot_channels: + idx = ev_avg.ch_names.index(ch) + lw = 3 if ch == 'Oz' else 1.5 + alpha = 1.0 if ch == 'Oz' else 0.7 + ax.plot(t_mc, ev_avg.data[idx] * 1e6, + color=ch_colors.get(ch, 'gray'), linewidth=lw, alpha=alpha, label=ch) + + for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax.axvline(x=ms, color=col, linestyle=':', alpha=0.5, + label=lbl if ax == axes_mc[0] else '') + + ax.set_title(f'[{ref_label}] {eye_name}: Multi-Channel Topography') + ax.set_xlabel('Time (ms)') + if ax == axes_mc[0]: + ax.set_ylabel('Amplitude (µV)') + ax.axhline(0, color='black', alpha=0.3) + ax.axvline(0, color='black', linestyle='--', alpha=0.5) + handles, lbls = ax.get_legend_handles_labels() + ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), + loc='upper right') + +fig_mc.tight_layout() +plt.show() + +# ========================================================================= +# SECTION 1: Pre-chiasmatic / Optic Nerve Biomarkers +# +# BM1–BM5 all measure the L−R optic-nerve contrast at Oz. Because both eyes +# share the same Quest → Cyton signal chain the unmeasured residual lags +# cancel in every L−R difference, making these biomarkers robust to the +# absolute timing uncertainty in this setup. +# ========================================================================= +print("\n" + "="*70) +print("SECTION 1 — Pre-chiasmatic / Optic Nerve") +print("="*70) + +############################################################################### +# ## BM1 — IOLD: inter-ocular P100 latency difference (pooled) +# +# The signed L−R difference in P100 latency at Oz (size-averaged evoked). +# > 6–8 ms is the most-cited clinical threshold for unilateral demyelination. +# + +results['iold'] = compute_iold(p100_left, p100_right) + +print("\n--- BM1: IOLD (pooled) ---") +if results['iold'] is None: + print("[BM1] Cannot compute — P100 not detected in one or both eyes") +else: + d = results['iold'] + direction = "left delayed" if d['iold_ms'] > 0 else "right delayed" + status = 'FLAG' if d['flag'] else f'within ±{IOLD_FLAG_MS:.0f} ms' + print(f"[BM1] P100 Left = {d['p100_left_ms']:.2f} ms Right = {d['p100_right_ms']:.2f} ms") + print(f"[BM1] IOLD L−R = {d['iold_ms']:+.2f} ms ({direction}) [{status}]") + + fig_bm1, ax_bm1 = plt.subplots(figsize=(6, 5)) + bar_vals = [d['p100_left_ms'], d['p100_right_ms']] + bars = ax_bm1.bar([0, 1], bar_vals, color=['#1f77b4', '#d62728'], alpha=0.75, width=0.45) + y_top = max(bar_vals) + 5 + ax_bm1.annotate('', xy=(1, y_top), xytext=(0, y_top), + arrowprops=dict(arrowstyle='<->', color='#7d3c98', lw=2)) + flag_marker = ' ⚑ FLAG' if d['flag'] else '' + ax_bm1.text(0.5, y_top + 1.5, f'IOLD = {d["iold_ms"]:+.1f} ms{flag_marker}', + ha='center', va='bottom', color='#7d3c98', fontsize=11, fontweight='bold') + # shade the ±threshold band around right-eye bar to give visual reference + ref = d['p100_right_ms'] + ax_bm1.axhspan(ref - IOLD_FLAG_MS, ref + IOLD_FLAG_MS, + alpha=0.10, color='orange', label=f'±{IOLD_FLAG_MS:.0f} ms threshold band') + ax_bm1.set_xticks([0, 1]) + ax_bm1.set_xticklabels(['Left Eye', 'Right Eye'], fontsize=12) + ax_bm1.set_ylabel('P100 latency at Oz (ms)') + ax_bm1.set_title(f'[{ref_label}] BM1: IOLD — inter-ocular P100 latency') + ax_bm1.set_ylim(0, y_top + 8) + ax_bm1.legend(fontsize=9) + ax_bm1.grid(axis='y', alpha=0.3) + fig_bm1.tight_layout() + plt.show() + +############################################################################### +# ## BM2 — IOLD per check size +# +# Demyelination preferentially delays high-spatial-frequency (small-check) +# responses, so the per-size IOLD often surfaces lateralised dysfunction that +# the size-pooled IOLD averages out. +# + +results['iold_per_size'] = compute_iold_per_size(ch_epochs_corr, event_id, PICK_CH) + +print("\n--- BM2: IOLD per check size ---") +for size, d in results['iold_per_size'].items(): + if d is None: + print(f"[BM2/{size}] Cannot compute — P100 not detected at one or both eyes") + continue + direction = "left delayed" if d['iold_ms'] > 0 else "right delayed" + status = 'FLAG' if d['flag'] else f'within ±{IOLD_FLAG_MS:.0f} ms' + print(f"[BM2/{size}] P100 Left = {d['p100_left_ms']:.2f} ms Right = {d['p100_right_ms']:.2f} ms") + print(f"[BM2/{size}] IOLD L−R = {d['iold_ms']:+.2f} ms ({direction}) [{status}]") + +# Grouped bar: L/R per check size +sizes_present = [s for s, d in results['iold_per_size'].items() if d is not None] +if sizes_present: + fig_bm2, ax_bm2 = plt.subplots(figsize=(8, 5)) + x2 = np.arange(len(sizes_present)) + w2 = 0.32 + for i, (eye_prefix, color, eye_label) in enumerate( + [('left', '#1f77b4', 'Left Eye'), ('right', '#d62728', 'Right Eye')]): + lats = [results['iold_per_size'][s][f'p100_{eye_prefix}_ms'] for s in sizes_present] + ax_bm2.bar(x2 + (i - 0.5) * w2, lats, w2, color=color, alpha=0.75, label=eye_label) + + for j, size in enumerate(sizes_present): + d = results['iold_per_size'][size] + if d and d.get('iold_ms') is not None: + flag_str = ' ⚑' if d['flag'] else '' + top = max(d['p100_left_ms'], d['p100_right_ms']) + ax_bm2.text(j, top + 1.5, f'IOLD\n{d["iold_ms"]:+.1f}ms{flag_str}', + ha='center', fontsize=9, color='#7d3c98', fontweight='bold') + + ax_bm2.set_xticks(x2) + ax_bm2.set_xticklabels([f'{s.title()} checks\n({CHECK_SIZE_ARCMIN[s]:.0f} arcmin)' + for s in sizes_present], fontsize=11) + ax_bm2.set_ylabel('P100 latency at Oz (ms)') + ax_bm2.set_title(f'[{ref_label}] BM2: IOLD per check size') + ax_bm2.legend() + ax_bm2.grid(axis='y', alpha=0.3) + fig_bm2.tight_layout() + plt.show() + +############################################################################### +# ## BM3 — Check-size slope +# +# Per-eye P100 latency slope vs. check size (ms / arcmin). Demyelination +# preferentially delays high-spatial-frequency (small-check) responses, so the +# L−R slope difference amplifies asymmetric demyelination beyond what a +# single-check IOLD captures. +# +# Check-size mapping: +# large → 1.0 deg = 60 arcmin (ISCEV "large check") +# small → 0.25 deg = 15 arcmin (ISCEV "small check") +# + +results['slope'] = compute_check_size_slope( + ch_epochs_corr, event_id, PICK_CH, CHECK_SIZE_ARCMIN, +) +s = results['slope'] + +print("\n--- BM3: Check-size slope ---") +for cond_key, lat_ms in s['per_condition_p100_ms'].items(): + print(f"[BM3] {cond_key}: P100 = {lat_ms:.2f} ms") +if s['slope_left_ms_per_arcmin'] is not None: + print(f"[BM3] Left eye slope: {s['slope_left_ms_per_arcmin']:+.4f} ms/arcmin") +if s['slope_right_ms_per_arcmin'] is not None: + print(f"[BM3] Right eye slope: {s['slope_right_ms_per_arcmin']:+.4f} ms/arcmin") +if s['slope_diff'] is not None: + print(f"[BM3] Slope diff L−R: {s['slope_diff']:+.4f} ms/arcmin " + f"(positive = left more SF-dependent = left more affected)") +elif not s['per_condition_p100_ms']: + print("[BM3] Insufficient per-condition P100 detections for slope estimation") +else: + print("[BM3] Need both eyes detected for slope difference") + +# Scatter + regression lines +if s['per_condition_p100_ms']: + fig_bm3, ax_bm3 = plt.subplots(figsize=(7, 5)) + for eye_prefix, color, eye_label, slope_key in [ + ('left_eye', '#1f77b4', 'Left Eye', 'slope_left_ms_per_arcmin'), + ('right_eye', '#d62728', 'Right Eye', 'slope_right_ms_per_arcmin'), + ]: + pts = [] + for cond_key, lat_ms in s['per_condition_p100_ms'].items(): + if cond_key.startswith(eye_prefix) and lat_ms is not None: + size_label = cond_key.split('/')[1] + if size_label in CHECK_SIZE_ARCMIN: + pts.append((CHECK_SIZE_ARCMIN[size_label], lat_ms)) + if not pts: + continue + pts.sort() + xs_p, ys_p = zip(*pts) + ax_bm3.scatter(xs_p, ys_p, color=color, s=100, zorder=5) + + slope_val = s.get(slope_key) + if slope_val is not None and len(pts) >= 2: + intercept = np.mean(ys_p) - slope_val * np.mean(xs_p) + x_fit = np.linspace(min(xs_p) - 5, max(xs_p) + 5, 80) + ax_bm3.plot(x_fit, slope_val * x_fit + intercept, color=color, lw=2, + label=f'{eye_label}: {slope_val:+.3f} ms/arcmin') + else: + ax_bm3.plot(xs_p, ys_p, color=color, lw=1.5, label=eye_label) + + if s['slope_diff'] is not None: + ax_bm3.annotate(f'Slope diff L−R = {s["slope_diff"]:+.3f} ms/arcmin', + xy=(0.05, 0.95), xycoords='axes fraction', + ha='left', va='top', fontsize=10, color='#7d3c98', + fontweight='bold') + ax_bm3.set_xlabel('Check size (arcmin)') + ax_bm3.set_ylabel('P100 latency at Oz (ms)') + ax_bm3.set_title(f'[{ref_label}] BM3: P100 latency vs check size (slope)') + ax_bm3.legend() + ax_bm3.grid(True, alpha=0.3) + fig_bm3.tight_layout() + plt.show() + +############################################################################### +# ## BM4 — P100 amplitude ratio L/R +# +# Inter-ocular amplitude ratio at P100. Less specific than latency but +# computed for free from the same recordings. |log2(L/R)| > 1 (ratio outside +# ~0.5–2.0) flags attenuated drive on the lower-amplitude side. +# +# Caveat: amplitude is sensitive to electrode contact / pulse artifact / +# subject alertness. Treat amplitude ratios as supportive evidence rather than +# standalone biomarkers until several clean baseline sessions bracket the +# day-to-day variance. +# + +results['amplitude'] = compute_amplitude_ratio(p100_left, p100_right) + +print("\n--- BM4: Amplitude ratio L/R ---") +if results['amplitude'] is None: + if p100_left is None or p100_right is None: + print("[BM4] Cannot compute — P100 not detected in one or both eyes") + else: + print("[BM4] Right-eye P100 amplitude is zero; ratio undefined") +else: + a = results['amplitude'] + status = 'FLAG' if a['flag'] else 'within ±1 log₂' + print(f"[BM4] P100 amplitude Left = {a['amp_left_uv']:.2f} µV") + print(f"[BM4] P100 amplitude Right = {a['amp_right_uv']:.2f} µV") + print(f"[BM4] L/R ratio = {a['ratio']:.2f} (log₂ = {a['log2_ratio']:+.2f}) [{status}]") + + fig_bm4, ax_bm4 = plt.subplots(figsize=(6, 5)) + ax_bm4.bar([0, 1], [a['amp_left_uv'], a['amp_right_uv']], + color=['#1f77b4', '#d62728'], alpha=0.75, width=0.45) + ax_bm4.set_xticks([0, 1]) + ax_bm4.set_xticklabels(['Left Eye', 'Right Eye'], fontsize=12) + ax_bm4.set_ylabel('P100 amplitude at Oz (µV)') + flag_marker = ' ⚑ FLAG' if a['flag'] else '' + ax_bm4.set_title(f'[{ref_label}] BM4: P100 amplitude L/R\n' + f'ratio = {a["ratio"]:.2f} (log₂ = {a["log2_ratio"]:+.2f}){flag_marker}') + ax_bm4.grid(axis='y', alpha=0.3) + fig_bm4.tight_layout() + plt.show() + +############################################################################### +# ## BM5 — Bootstrap P100 / IOLD confidence intervals +# +# The 8 ms IOLD threshold is only meaningful relative to the precision of +# the L and R latency estimates. A 7 ms IOLD with ±2 ms CI is clinically +# suspicious; a 7 ms IOLD with ±5 ms CI is noise. +# +# Trial-resamples with replacement, recomputes the trimmed-mean evoked at +# PICK_CH, locates the positive peak in the P100 search window. The IOLD CI +# uses pairwise differences of two independent bootstrap samples. +# + +N_BOOT = 1000 +BOOT_SEED = 0 + +boot_left = bootstrap_p100_latency( + ch_epochs_corr, event_id, PICK_CH, 'left_eye', + win_ms=P100_WIN_MS, n_boot=N_BOOT, seed=BOOT_SEED, +) +boot_right = bootstrap_p100_latency( + ch_epochs_corr, event_id, PICK_CH, 'right_eye', + win_ms=P100_WIN_MS, n_boot=N_BOOT, seed=BOOT_SEED + 1, +) + +print("\n--- BM5: Bootstrap P100 / IOLD confidence intervals ---") + +if boot_left is not None and boot_right is not None: + l_med, l_lo, l_hi = (np.percentile(boot_left, 50), + np.percentile(boot_left, 2.5), + np.percentile(boot_left, 97.5)) + r_med, r_lo, r_hi = (np.percentile(boot_right, 50), + np.percentile(boot_right, 2.5), + np.percentile(boot_right, 97.5)) + diffs = boot_left - boot_right + d_med, d_lo, d_hi = (np.percentile(diffs, 50), + np.percentile(diffs, 2.5), + np.percentile(diffs, 97.5)) + excludes_zero = (d_lo > 0) or (d_hi < 0) + excl_8ms = (d_lo > 8.0) or (d_hi < -8.0) + print(f"[BM5] Left P100 median = {l_med:.2f} ms 95% CI = [{l_lo:.2f}, {l_hi:.2f}] " + f"(±{(l_hi-l_lo)/2:.2f} ms)") + print(f"[BM5] Right P100 median = {r_med:.2f} ms 95% CI = [{r_lo:.2f}, {r_hi:.2f}] " + f"(±{(r_hi-r_lo)/2:.2f} ms)") + print(f"[BM5] IOLD (L−R) median = {d_med:+.2f} ms 95% CI = [{d_lo:+.2f}, {d_hi:+.2f}]") + print(f"[BM5] {'CI excludes 0 — significant' if excludes_zero else 'CI includes 0 — not separable'}") + print(f"[BM5] {'CI excludes ±8 ms — clinically meaningful' if excl_8ms else 'CI overlaps ±8 ms — borderline'}") + + results['bootstrap'] = { + 'n_boot': int(N_BOOT), + 'win_ms': list(P100_WIN_MS), + 'left_p100_median_ms': _f(l_med), + 'left_p100_ci_lo_ms': _f(l_lo), + 'left_p100_ci_hi_ms': _f(l_hi), + 'right_p100_median_ms': _f(r_med), + 'right_p100_ci_lo_ms': _f(r_lo), + 'right_p100_ci_hi_ms': _f(r_hi), + 'iold_median_ms': _f(d_med), + 'iold_ci_lo_ms': _f(d_lo), + 'iold_ci_hi_ms': _f(d_hi), + 'iold_excludes_zero': bool(excludes_zero), + 'iold_excludes_8ms': bool(excl_8ms), + } + + # Bootstrap latency distribution + fig_bm5, ax_bm5 = plt.subplots(figsize=(10, 5)) + bins5 = np.arange(P100_WIN_MS[0], P100_WIN_MS[1] + 4, 4) + ax_bm5.hist(boot_left, bins=bins5, alpha=0.5, color='#1f77b4', + label=f'Left ({l_med:.1f} ms, 95% CI [{l_lo:.1f}, {l_hi:.1f}])') + ax_bm5.hist(boot_right, bins=bins5, alpha=0.5, color='#d62728', + label=f'Right ({r_med:.1f} ms, 95% CI [{r_lo:.1f}, {r_hi:.1f}])') + ax_bm5.axvline(l_med, color='#1f77b4', linestyle='--', alpha=0.8) + ax_bm5.axvline(r_med, color='#d62728', linestyle='--', alpha=0.8) + ax_bm5.axvspan(l_lo, l_hi, alpha=0.10, color='#1f77b4') + ax_bm5.axvspan(r_lo, r_hi, alpha=0.10, color='#d62728') + flag_str5 = ' ⚑ CI excludes 0' if excludes_zero else ' CI includes 0' + ax_bm5.set_xlabel('P100 latency (ms)') + ax_bm5.set_ylabel(f'Bootstrap count (N={N_BOOT})') + ax_bm5.set_title(f'[{ref_label}] BM5: Bootstrap P100 distribution — {PICK_CH}\n' + f'IOLD = {d_med:+.2f} ms 95% CI [{d_lo:+.2f}, {d_hi:+.2f}]{flag_str5}') + ax_bm5.legend(loc='upper right') + ax_bm5.grid(True, alpha=0.3) + fig_bm5.tight_layout() + plt.show() +else: + print("[BM5] Insufficient trials in one or both eyes — skipping") + results['bootstrap'] = None + +# ========================================================================= +# SECTION 2: Morphological Indicators +# +# BM6 examines the shape of the P100 itself rather than its latency or +# amplitude, targeting waveform distortions that can accompany partial +# demyelination or multifocal lesions. +# ========================================================================= +print("\n" + "="*70) +print("SECTION 2 — Morphological") +print("="*70) + +############################################################################### +# ## BM6 — W-peak (bifurcated P100) +# +# Partial demyelination or multifocal lesions can split the P100 into two +# distinct peaks (a "W" shape), reflecting asynchronous arrival of fast and +# slow fibre populations. The search window is 80–130 ms; two peaks are flagged +# when each rises > 1 µV above the dip between them. +# + +print("\n--- BM6: W-peak (bifurcated P100) ---") + +wpeak_results = {} +for eye_name, ev_data in [('Left Eye', evoked_left_corr_avg), + ('Right Eye', evoked_right_corr_avg)]: + if ev_data is None: + continue + oz_idx = ev_data.ch_names.index(PICK_CH) + t_ms = ev_data.times * 1000 + oz_uv = ev_data.data[oz_idx] * 1e6 + + w_mask = (t_ms >= 80) & (t_ms <= 130) + oz_win = oz_uv[w_mask] + t_win = t_ms[w_mask] + peaks_w, _ = find_peaks(oz_win, prominence=0.5, distance=3) + + flagged = False + if len(peaks_w) >= 2: + p1_t, p2_t = t_win[peaks_w[0]], t_win[peaks_w[1]] + p1_v, p2_v = oz_win[peaks_w[0]], oz_win[peaks_w[1]] + dip_v = float(np.min(oz_win[peaks_w[0]:peaks_w[1] + 1])) + if p1_v - dip_v > 1.0 and p2_v - dip_v > 1.0: + flagged = True + print(f"[BM6 {eye_name}] FLAG: W-peak detected on {PICK_CH}") + print(f" Peak 1: {p1_v:.2f} µV at {p1_t:.1f} ms") + print(f" Peak 2: {p2_v:.2f} µV at {p2_t:.1f} ms") + print(f" Dip: {dip_v:.2f} µV (depths: P1−dip={p1_v-dip_v:.2f}, P2−dip={p2_v-dip_v:.2f})") + wpeak_results[eye_name] = {'flagged': True, 'p1_ms': _f(p1_t), 'p2_ms': _f(p2_t), + 'p1_uv': _f(p1_v), 'p2_uv': _f(p2_v), 'dip_uv': _f(dip_v)} + if not flagged: + print(f"[BM6 {eye_name}] Normal single P100 morphology") + wpeak_results[eye_name] = {'flagged': False} + +results['wpeak'] = wpeak_results + +# Waveform plot with peak annotations +fig_bm6, axes_bm6 = plt.subplots(1, 2, figsize=(14, 5), sharey=True) +for ax, (eye_name, ev_data) in zip(axes_bm6, + [('Left Eye', evoked_left_corr_avg), + ('Right Eye', evoked_right_corr_avg)]): + if ev_data is None: + continue + oz_idx = ev_data.ch_names.index(PICK_CH) + t_ms = ev_data.times * 1000 + oz_uv = ev_data.data[oz_idx] * 1e6 + + ax.plot(t_ms, oz_uv, color='black', lw=2, label=PICK_CH) + ax.axvspan(80, 130, alpha=0.07, color='green', label='W-peak search (80–130 ms)') + + # Annotate detected peaks in search window + w_mask = (t_ms >= 80) & (t_ms <= 130) + oz_win = oz_uv[w_mask] + t_win = t_ms[w_mask] + peaks_w, _ = find_peaks(oz_win, prominence=0.5, distance=3) + for pi, pk in enumerate(peaks_w[:3]): + ax.annotate(f'P{pi+1}: {oz_win[pk]:.1f} µV\n@ {t_win[pk]:.0f} ms', + xy=(t_win[pk], oz_win[pk]), + xytext=(t_win[pk] + 8, oz_win[pk] + 1.5), + arrowprops=dict(arrowstyle='->', color='green', lw=1.2), + fontsize=8, color='green') + + for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax.axvline(ms, color=col, linestyle='--', alpha=0.5, label=lbl) + + wres = wpeak_results.get(eye_name, {}) + flag_title = ' ⚑ W-PEAK FLAGGED' if wres.get('flagged') else '' + ax.set_title(f'[{ref_label}] BM6: W-peak — {eye_name}{flag_title}') + ax.set_xlabel('Time (ms)') + ax.axhline(0, color='black', alpha=0.3) + ax.axvline(0, color='black', linestyle='--', alpha=0.5) + if ax == axes_bm6[0]: + ax.set_ylabel('Amplitude (µV)') + handles, lbls = ax.get_legend_handles_labels() + ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), + fontsize=9, loc='upper right') + +fig_bm6.tight_layout() +plt.show() + +# ========================================================================= +# SECTION 3: Post-chiasmatic / Cortical Biomarkers +# +# BM7–BM12 examine how the VEP distributes across scalp channels, targeting +# post-chiasmatic asymmetries and generator-confirmation checks. +# +# Hemisphere note: due to V1 anatomy (calcarine cortex folded into the +# longitudinal fissure), the P100 dipole projects PARADOXICALLY — right +# hemisphere V1 → left scalp (O1), left hemisphere V1 → right scalp (O2). +# P7/P8 (lateral extrastriate) project more directly ipsilaterally and are +# therefore less ambiguous for cortical-side lateralization. +# ========================================================================= +print("\n" + "="*70) +print("SECTION 3 — Post-chiasmatic / Cortical") +print("="*70) + +############################################################################### +# ## BM7 — Hemispheric asymmetry (O1 vs O2) +# +# Compares P100 latency and amplitude between left (O1) and right (O2) +# occipital channels. A post-chiasmatic lesion typically produces a "crossed +# asymmetry": the P100 is delayed or attenuated over the ipsilateral scalp +# (paradoxical lateralization) regardless of which eye is stimulated. +# +# **Paradoxical lateralization**: deficit at O1 → RIGHT hemisphere lesion; +# deficit at O2 → LEFT hemisphere lesion. +# + +print("\n--- BM7: Hemispheric asymmetry O1/O2 ---") + +fig_bm7, axes_bm7 = plt.subplots(1, 2, figsize=(16, 6), sharey=True) +hemi_per_eye = {} + +for ax, (eye_name, ev_avg) in zip(axes_bm7, + [('Left Eye', evoked_left_corr_avg), + ('Right Eye', evoked_right_corr_avg)]): + if ev_avg is None: + continue + + h = compute_hemi_asymmetry(ev_avg, 'O1', 'O2') + if h is not None: + lat_status = 'FLAG' if h['lat_flag'] else f'within ±{IOLD_FLAG_MS:.0f} ms' + amp_status = 'FLAG' if h['amp_flag'] else 'within ±1 log₂' + print(f"[BM7 {eye_name}] Latency: O1 = {h['lat_o1']:.2f} ms, O2 = {h['lat_o2']:.2f} ms " + f"(O1−O2 = {h['lat_diff_ms']:+.2f} ms [{lat_status}])") + print(f"[BM7 {eye_name}] Amplitude: O1 = {h['amp_o1']:.2f} µV, O2 = {h['amp_o2']:.2f} µV " + f"(O1/O2 = {h['amp_ratio']:.2f} [{amp_status}])") + hemi_per_eye[eye_name] = h + else: + ev_o1 = ev_avg.copy().pick(['O1']) + ev_o2 = ev_avg.copy().pick(['O2']) + _, p100_o1, _ = get_pr_vep_latencies(ev_o1) + _, p100_o2, _ = get_pr_vep_latencies(ev_o2) + if p100_o1 is not None or p100_o2 is not None: + detected = 'O1' if p100_o1 is not None else 'O2' + missing = 'O2' if p100_o1 is not None else 'O1' + print(f"[BM7 {eye_name}] FLAG: P100 at {detected} but absent at {missing}") + else: + print(f"[BM7 {eye_name}] P100 not detected in either O1 or O2") + + # Waveform + t_h = ev_avg.times * 1000 + for ch, color in [('O1', '#9467bd'), ('O2', '#e377c2')]: + if ch in ev_avg.ch_names: + idx = ev_avg.ch_names.index(ch) + ax.plot(t_h, ev_avg.data[idx] * 1e6, color=color, lw=2, label=ch) + for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax.axvline(ms, color=col, linestyle='--', alpha=0.6, + label=lbl if ax == axes_bm7[0] else '') + ax.set_title(f'[{ref_label}] BM7: Hemispheric asymmetry — {eye_name}') + ax.set_xlabel('Time (ms)') + ax.axhline(0, color='black', alpha=0.3) + ax.axvline(0, color='black', linestyle='--', alpha=0.5) + if ax == axes_bm7[0]: + ax.set_ylabel('Amplitude (µV)') + ax.legend(loc='upper right') + +fig_bm7.tight_layout() +plt.show() + +results['hemi_o1o2'] = dict(hemi_per_eye) + +############################################################################### +# ## BM8 — Inter-ocular Δ-asymmetry (O1 vs O2) +# +# Per-eye O1/O2 differences conflate the lesion signal with stable anatomical +# and electrode-stationary asymmetries (skull thickness, calcarine fold, etc.). +# Subtracting one eye's asymmetry from the other's cancels those stationary +# contributions: +# +# Δlat = (O1−O2)|left_eye − (O1−O2)|right_eye +# Δlog₂ = log₂(O1/O2)|left_eye − log₂(O1/O2)|right_eye +# +# ≈ 0 → purely anatomical / electrode-stationary. +# Large value → eye-dependent skew: the asymmetry depends on which eye drives +# cortex, implying a pathway signal rather than a scalp constant. +# + +results['hemi_delta_o1o2'] = compute_hemi_delta_asymmetry( + hemi_per_eye.get('Left Eye'), hemi_per_eye.get('Right Eye'), 'O1', 'O2', +) + +print("\n--- BM8: Inter-ocular Δ-asymmetry O1/O2 ---") +if results['hemi_delta_o1o2'] is None: + print("[BM8] Need P100 at both O1 and O2 in both eyes — skipping") +else: + d8 = results['hemi_delta_o1o2'] + print(f"[BM8] (O1−O2) latency: L-eye = {d8['lat_asym_left']:+.2f} ms, " + f"R-eye = {d8['lat_asym_right']:+.2f} ms") + print(f"[BM8] Δlat = {d8['d_lat']:+.2f} ms " + f"(≈0 ⇒ anatomical; large ⇒ eye-dependent)") + print(f"[BM8] log₂(O1/O2): L-eye = {d8['log2_asym_left']:+.2f}, " + f"R-eye = {d8['log2_asym_right']:+.2f}") + print(f"[BM8] Δlog₂ = {d8['d_log2']:+.2f} " + f"(≈0 ⇒ anatomical; large ⇒ eye-dependent)") + + fig_bm8, axes_bm8 = plt.subplots(1, 2, figsize=(10, 5)) + + # Latency asymmetry per eye drive + ax = axes_bm8[0] + lat_vals = [d8['lat_asym_left'] or 0, d8['lat_asym_right'] or 0] + ax.bar(['Left Eye\ndrive', 'Right Eye\ndrive'], lat_vals, + color=['#1f77b4', '#d62728'], alpha=0.75) + ax.axhline(0, color='black', lw=1) + ax.set_ylabel('O1 − O2 latency asymmetry (ms)') + ax.set_title(f'Δlat = {d8["d_lat"]:+.2f} ms') + ax.grid(axis='y', alpha=0.3) + + # Amplitude asymmetry per eye drive + ax = axes_bm8[1] + log2_vals = [d8['log2_asym_left'] or 0, d8['log2_asym_right'] or 0] + ax.bar(['Left Eye\ndrive', 'Right Eye\ndrive'], log2_vals, + color=['#1f77b4', '#d62728'], alpha=0.75) + ax.axhline(0, color='black', lw=1) + ax.set_ylabel('log₂(O1/O2) amplitude asymmetry') + ax.set_title(f'Δlog₂ = {d8["d_log2"]:+.2f}') + ax.grid(axis='y', alpha=0.3) + + fig_bm8.suptitle(f'[{ref_label}] BM8: Inter-ocular Δ-asymmetry O1/O2\n' + '≈0 bars of equal height → stationary anatomy; ' + 'unequal → eye-dependent (pathway signal)', + fontsize=10) + fig_bm8.tight_layout() + plt.show() + +############################################################################### +# ## BM9 — Lateral extrastriate P100 (P7/P8) + Oz→lateral propagation +# +# P7/P8 pick up a P100 from lateral extrastriate cortex (V2/V3/MT), typically +# delayed 5–15 ms after Oz (intracortical V1→extrastriate propagation) and +# lower amplitude. Two reads: +# +# - P100 detection at P7/P8 confirms an extrastriate response exists at all. +# - Oz→lateral propagation latency should be a small positive number (0–25 ms). +# Abnormally long or reversed sign suggests intracortical / extrastriate +# conduction issues distinct from optic-nerve demyelination. +# + +print("\n--- BM9: Lateral extrastriate P7/P8 + Oz→lateral propagation ---") + +lateral_per_eye = {} +results['lateral_p7p8'] = {} + +for eye_name, ev_avg, oz_p100 in [ + ('Left Eye', evoked_left_corr_avg, p100_left), + ('Right Eye', evoked_right_corr_avg, p100_right), +]: + if ev_avg is None: + continue + per_eye = {'oz': oz_p100, 'p7': None, 'p8': None} + per_eye_results = {} + for ch in LATERAL_CHANNELS: + if ch not in ev_avg.ch_names: + continue + _, p100_lat, _ = get_pr_vep_latencies(ev_avg.copy().pick([ch])) + per_eye[ch.lower()] = p100_lat + if p100_lat is None: + print(f"[BM9 {eye_name}] {ch}: P100 not detected") + per_eye_results[ch] = None + continue + lat_ms_v = p100_lat['latency'] * 1000.0 + amp_uv_v = p100_lat['amplitude'] * 1e6 + print(f"[BM9 {eye_name}] {ch}: P100 = {amp_uv_v:+.2f} µV at {lat_ms_v:.2f} ms") + ch_entry = {'lat_ms': _f(lat_ms_v), 'amp_uv': _f(amp_uv_v), 'propagation_ms': None} + if oz_p100 is not None: + prop_ms = lat_ms_v - oz_p100['latency'] * 1000.0 + in_range = -2 <= prop_ms <= 25 + status = 'normal' if in_range else 'OUT OF RANGE' + print(f"[BM9 {eye_name}] {ch}−Oz propagation: {prop_ms:+.2f} ms " + f"[{status}, expected −2 to +25 ms]") + ch_entry['propagation_ms'] = _f(prop_ms) + ch_entry['propagation_in_range'] = bool(in_range) + per_eye_results[ch] = ch_entry + lateral_per_eye[eye_name] = per_eye + results['lateral_p7p8'][eye_name] = per_eye_results + +# Waveform: Oz, P7, P8 per eye +fig_bm9, axes_bm9 = plt.subplots(1, 2, figsize=(14, 5), sharey=True) +lat_ch_colors = {'Oz': 'black', 'P7': '#1f77b4', 'P8': '#d62728'} +lat_ch_lw = {'Oz': 2.5, 'P7': 1.8, 'P8': 1.8} + +for ax, (eye_name, ev_avg) in zip(axes_bm9, + [('Left Eye', evoked_left_corr_avg), + ('Right Eye', evoked_right_corr_avg)]): + if ev_avg is None: + continue + t_lat = ev_avg.times * 1000 + for ch in ['Oz', 'P7', 'P8']: + if ch not in ev_avg.ch_names: + continue + idx = ev_avg.ch_names.index(ch) + ax.plot(t_lat, ev_avg.data[idx] * 1e6, + color=lat_ch_colors[ch], lw=lat_ch_lw[ch], label=ch) + + # Annotate propagation delays + eye_lat = results['lateral_p7p8'].get(eye_name, {}) + for ch in ['P7', 'P8']: + ch_entry = eye_lat.get(ch) + if ch_entry and ch_entry.get('propagation_ms') is not None: + lat_ms_v = ch_entry['lat_ms'] + prop_ms = ch_entry['propagation_ms'] + ok_str = '✓' if ch_entry.get('propagation_in_range', True) else '⚑' + # find the y value at this latency for annotation placement + t_idx_ann = int(np.argmin(np.abs(t_lat - lat_ms_v))) + y_ann = ev_avg.data[ev_avg.ch_names.index(ch), t_idx_ann] * 1e6 + ax.annotate(f'{ch}: +{prop_ms:.0f}ms {ok_str}', + xy=(lat_ms_v, y_ann), + xytext=(lat_ms_v + 15, y_ann + 1.5), + arrowprops=dict(arrowstyle='->', color=lat_ch_colors[ch], lw=1), + fontsize=8, color=lat_ch_colors[ch]) + + for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax.axvline(ms, color=col, linestyle='--', alpha=0.5, + label=lbl if ax == axes_bm9[0] else '') + ax.set_title(f'[{ref_label}] BM9: Lateral extrastriate — {eye_name}') + ax.set_xlabel('Time (ms)') + ax.axhline(0, color='black', alpha=0.3) + ax.axvline(0, color='black', linestyle='--', alpha=0.5) + if ax == axes_bm9[0]: + ax.set_ylabel('Amplitude (µV)') + handles, lbls = ax.get_legend_handles_labels() + ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), + fontsize=9, loc='upper right') + +fig_bm9.tight_layout() +plt.show() + +############################################################################### +# ## BM10 — Lateral extrastriate asymmetry (P7 vs P8) + inter-ocular contrast +# +# Same logic as BM7/BM8 but on P7/P8. Critical advantage: extrastriate +# generators sit on the lateral cortical surface, so paradoxical lateralization +# is much weaker here than at O1/O2. P7/P8 hemispheric asymmetry is therefore +# a more direct readout of cortical-side asymmetry — useful for detecting +# unilateral lateral-occipital / parieto-occipital involvement. +# + +print("\n--- BM10: Lateral asymmetry P7/P8 + inter-ocular contrast ---") + +p7p8_asym_per_eye = {} +for eye_name, ev_avg in [('Left Eye', evoked_left_corr_avg), + ('Right Eye', evoked_right_corr_avg)]: + if ev_avg is None: + continue + h = compute_hemi_asymmetry(ev_avg, 'P7', 'P8') + if h is None: + print(f"[BM10 {eye_name}] P100 not detected at both P7 and P8 — skipping") + continue + lat_status = 'FLAG' if h['lat_flag'] else f'within ±{IOLD_FLAG_MS:.0f} ms' + amp_status = 'FLAG' if h['amp_flag'] else 'within ±1 log₂' + print(f"[BM10 {eye_name}] P7 = {h['lat_p7']:.2f} ms, P8 = {h['lat_p8']:.2f} ms " + f"(P7−P8 = {h['lat_diff_ms']:+.2f} ms [{lat_status}])") + print(f"[BM10 {eye_name}] P7 = {h['amp_p7']:.2f} µV, P8 = {h['amp_p8']:.2f} µV " + f"(P7/P8 = {h['amp_ratio']:.2f} [{amp_status}])") + p7p8_asym_per_eye[eye_name] = h + +results['hemi_p7p8'] = dict(p7p8_asym_per_eye) +results['hemi_delta_p7p8'] = compute_hemi_delta_asymmetry( + p7p8_asym_per_eye.get('Left Eye'), p7p8_asym_per_eye.get('Right Eye'), 'P7', 'P8', +) + +if results['hemi_delta_p7p8'] is not None: + d10 = results['hemi_delta_p7p8'] + print(f"[BM10] Δlat (P7−P8): {d10['d_lat']:+.2f} ms " + f"(≈0 ⇒ stationary; large ⇒ eye-dependent)") + print(f"[BM10] Δlog₂(P7/P8): {d10['d_log2']:+.2f} " + f"(≈0 ⇒ stationary; large ⇒ eye-dependent)") + + fig_bm10, axes_bm10 = plt.subplots(1, 2, figsize=(10, 5)) + + ax = axes_bm10[0] + ax.bar(['Left Eye\ndrive', 'Right Eye\ndrive'], + [d10['lat_asym_left'] or 0, d10['lat_asym_right'] or 0], + color=['#1f77b4', '#d62728'], alpha=0.75) + ax.axhline(0, color='black', lw=1) + ax.set_ylabel('P7 − P8 latency asymmetry (ms)') + ax.set_title(f'Δlat = {d10["d_lat"]:+.2f} ms') + ax.grid(axis='y', alpha=0.3) + + ax = axes_bm10[1] + ax.bar(['Left Eye\ndrive', 'Right Eye\ndrive'], + [d10['log2_asym_left'] or 0, d10['log2_asym_right'] or 0], + color=['#1f77b4', '#d62728'], alpha=0.75) + ax.axhline(0, color='black', lw=1) + ax.set_ylabel('log₂(P7/P8) amplitude asymmetry') + ax.set_title(f'Δlog₂ = {d10["d_log2"]:+.2f}') + ax.grid(axis='y', alpha=0.3) + + fig_bm10.suptitle(f'[{ref_label}] BM10: Inter-ocular Δ-asymmetry P7/P8\n' + '≈0 → stationary anatomy; unequal → eye-dependent (cortical-side signal)', + fontsize=10) + fig_bm10.tight_layout() + plt.show() + +############################################################################### +# ## BM11 — Combined lateral hemisphere composites +# +# Per-hemisphere composites: L-hemi = (O1+P7)/2, R-hemi = (O2+P8)/2. +# Three advantages over O1/O2 alone: +# - SNR ≈ √2 better (averaging two channels per hemisphere). +# - Dilutes the contribution of any single bad electrode contact. +# - Mixes the paradoxically-projected V1 component (O1/O2) with the +# directly-projected extrastriate component (P7/P8), giving a composite +# that is less ambiguous about cortical side than O1/O2 alone. +# + +print("\n--- BM11: Combined lateral hemisphere composites ---") + +fig_bm11, axes_bm11 = plt.subplots(1, 2, figsize=(16, 6), sharey=True) +composite_p100 = {} + +for ax, (eye_name, ev_avg, color) in zip(axes_bm11, [ + ('Left Eye', evoked_left_corr_avg, 'blue'), + ('Right Eye', evoked_right_corr_avg, 'red'), +]): + if ev_avg is None: + continue + if not all(ch in ev_avg.ch_names for ch in ('O1', 'O2', 'P7', 'P8')): + continue + idx_o1 = ev_avg.ch_names.index('O1') + idx_o2 = ev_avg.ch_names.index('O2') + idx_p7 = ev_avg.ch_names.index('P7') + idx_p8 = ev_avg.ch_names.index('P8') + + l_hemi = (ev_avg.data[idx_o1] + ev_avg.data[idx_p7]) / 2.0 + r_hemi = (ev_avg.data[idx_o2] + ev_avg.data[idx_p8]) / 2.0 + t_comp = ev_avg.times * 1000 + + ax.plot(t_comp, l_hemi * 1e6, color='#1f77b4', lw=2, + label='L-hemi (O1+P7)/2') + ax.plot(t_comp, r_hemi * 1e6, color='#d62728', lw=2, + label='R-hemi (O2+P8)/2') + + win_mask = (t_comp >= P100_WIN_MS[0]) & (t_comp <= P100_WIN_MS[1]) + win_t = t_comp[win_mask] + l_lat = win_t[np.argmax(l_hemi[win_mask])] + r_lat = win_t[np.argmax(r_hemi[win_mask])] + l_amp = float(l_hemi[win_mask].max() * 1e6) + r_amp = float(r_hemi[win_mask].max() * 1e6) + composite_p100[eye_name] = {'l_lat': l_lat, 'r_lat': r_lat, + 'l_amp': l_amp, 'r_amp': r_amp} + print(f"[BM11 {eye_name}] L-hemi P100 = {l_amp:+.2f} µV @ {l_lat:.1f} ms | " + f"R-hemi P100 = {r_amp:+.2f} µV @ {r_lat:.1f} ms") + + for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax.axvline(ms, color=col, linestyle='--', alpha=0.6, + label=lbl if ax == axes_bm11[0] else '') + ax.set_title(f'[{ref_label}] BM11: Composite hemispheres — {eye_name}') + ax.set_xlabel('Time (ms)') + if ax == axes_bm11[0]: + ax.set_ylabel('Amplitude (µV)') + ax.axhline(0, color='black', alpha=0.3) + ax.axvline(0, color='black', linestyle='--', alpha=0.5) + ax.legend(loc='upper right') + +fig_bm11.tight_layout() +plt.show() + +results['composite'] = {eye: {k: _f(v) for k, v in d.items()} + for eye, d in composite_p100.items()} +results['composite_delta'] = None +if 'Left Eye' in composite_p100 and 'Right Eye' in composite_p100: + Lc = composite_p100['Left Eye'] + Rc = composite_p100['Right Eye'] + d_lat_comp = (Lc['l_lat'] - Lc['r_lat']) - (Rc['l_lat'] - Rc['r_lat']) + log2_L = np.log2(Lc['l_amp'] / Lc['r_amp']) if Lc['r_amp'] > 0 else float('nan') + log2_R = np.log2(Rc['l_amp'] / Rc['r_amp']) if Rc['r_amp'] > 0 else float('nan') + d_log2_comp = log2_L - log2_R + print(f"[BM11] Composite Δlat = {d_lat_comp:+.2f} ms (eye-dependent hemispheric latency skew)") + print(f"[BM11] Composite Δlog₂ = {d_log2_comp:+.2f} (eye-dependent hemispheric amplitude skew)") + results['composite_delta'] = {'d_lat': _f(d_lat_comp), 'd_log2': _f(d_log2_comp)} + +############################################################################### +# ## BM12 — Topology QC: Pz gradient + Fz Halliday polarity inversion +# +# Halliday's frontal polarity-inversion check: a genuine V1-generated P100 +# produces a *negative* deflection at Fz at the same latency, because the +# posterior-pointing dipole projects with inverted polarity to the frontal +# scalp. This is a strong generator-confirmation that artifact, EMG, or +# alpha contamination cannot mimic. Pz should additionally show a smaller +# positive P100 (gradient: Oz > Pz, Fz < 0). +# +# Only meaningful under linked-mastoid: Fz is zero by construction under +# the Oz−Fz reference scheme. +# + +results['topology'] = None +if 'linked' in ref_label.lower() or 'mastoid' in ref_label.lower(): + print("\n--- BM12: Topology QC (Pz gradient + Fz Halliday inversion) ---") + + topology_results = {} + for eye_name, ev_avg, oz_p100 in [ + ('Left Eye', evoked_left_corr_avg, p100_left), + ('Right Eye', evoked_right_corr_avg, p100_right), + ]: + if ev_avg is None or oz_p100 is None: + print(f"[BM12 {eye_name}] Oz P100 not detected — skipping") + continue + + oz_lat_s = oz_p100['latency'] + oz_amp_uv = oz_p100['amplitude'] * 1e6 + t_idx = int(round((oz_lat_s - ev_avg.tmin) * ev_avg.info['sfreq'])) + t_idx = max(0, min(t_idx, ev_avg.data.shape[1] - 1)) + + entry = {'oz_amp_uv': _f(oz_amp_uv), 'pz_amp_uv': None, 'fz_amp_uv': None, + 'pz_gradient_ok': None, 'fz_inversion_ok': None} + + if 'Pz' in ev_avg.ch_names: + pz_amp = ev_avg.data[ev_avg.ch_names.index('Pz'), t_idx] * 1e6 + pz_ok = 0 < pz_amp < oz_amp_uv + pz_str = 'OK (positive, < Oz)' if pz_ok else 'FLAG: gradient broken' + print(f"[BM12 {eye_name}] Pz @ {oz_lat_s*1000:.1f} ms: {pz_amp:+.2f} µV " + f"(Oz = {oz_amp_uv:+.2f} µV) [{pz_str}]") + entry['pz_amp_uv'] = _f(pz_amp) + entry['pz_gradient_ok'] = bool(pz_ok) + + if 'Fz' in ev_avg.ch_names: + fz_amp = ev_avg.data[ev_avg.ch_names.index('Fz'), t_idx] * 1e6 + if abs(fz_amp) < 0.2: + print(f"[BM12 {eye_name}] Fz: {fz_amp:+.2f} µV " + f"[INACTIVE — Fz is the reference]") + entry['fz_amp_uv'] = _f(fz_amp) + entry['fz_inversion_ok'] = None + else: + fz_ok = fz_amp < 0 + fz_str = ('OK (inverted ⇒ V1 generator confirmed)' + if fz_ok else 'FLAG: same-sign as Oz') + print(f"[BM12 {eye_name}] Fz @ {oz_lat_s*1000:.1f} ms: {fz_amp:+.2f} µV " + f"(Oz = {oz_amp_uv:+.2f} µV) [{fz_str}]") + entry['fz_amp_uv'] = _f(fz_amp) + entry['fz_inversion_ok'] = bool(fz_ok) + + topology_results[eye_name] = entry + + results['topology'] = topology_results + + if topology_results: + fig_bm12, ax_bm12 = plt.subplots(figsize=(8, 5)) + eyes_t = list(topology_results.keys()) + x_t = np.arange(len(eyes_t)) + w_t = 0.22 + ch_order = [('oz_amp_uv', 'Oz', 'black'), + ('pz_amp_uv', 'Pz', '#2ca02c'), + ('fz_amp_uv', 'Fz', '#ff7f0e')] + for i, (key, label, color) in enumerate(ch_order): + vals = [topology_results.get(eye, {}).get(key) or 0 for eye in eyes_t] + ax_bm12.bar(x_t + (i - 1) * w_t, vals, w_t, + color=color, alpha=0.75, label=label) + ax_bm12.axhline(0, color='black', lw=0.8) + ax_bm12.set_xticks(x_t) + ax_bm12.set_xticklabels(eyes_t) + ax_bm12.set_ylabel('Amplitude at Oz-P100 latency (µV)') + ax_bm12.set_title(f'[{ref_label}] BM12: Topology QC\n' + 'Oz > 0, Pz > 0 (gradient), Fz < 0 (Halliday inversion)') + ax_bm12.legend() + ax_bm12.grid(axis='y', alpha=0.3) + fig_bm12.tight_layout() + plt.show() +else: + print("\n[BM12] Topology QC skipped — requires Linked Mastoid reference " + "(run again with REF_SCHEME = 'Linked Mastoid M1+M2')") + +# ========================================================================= +# SUMMARY +# ========================================================================= +print("\n" + "="*70) +print("BIOMARKER SUMMARY") +print("="*70) + +_summary = [] + +def _row(bm_id, name, flag, value_str): + _summary.append({'id': bm_id, 'name': name, 'flag': flag, 'value': value_str}) + +def _fmt_delta(d, lat_key='d_lat', log2_key='d_log2'): + if not d or d.get(lat_key) is None: + return 'N/A' + log2_v = d.get(log2_key) + return f'Δlat={d[lat_key]:+.2f} ms, Δlog₂=' + (f'{log2_v:+.2f}' if log2_v is not None else 'N/A') + +iold = results.get('iold') or {} +_row('BM1', 'IOLD pooled (Oz)', + iold.get('flag'), + f'{iold["iold_ms"]:+.1f} ms' if iold.get('iold_ms') is not None else 'N/A') + +for size, d_sz in (results.get('iold_per_size') or {}).items(): + _row(f'BM2/{size}', f'IOLD {size} checks (Oz)', + d_sz['flag'] if d_sz else None, + f'{d_sz["iold_ms"]:+.1f} ms' if d_sz and d_sz.get('iold_ms') is not None else 'N/A') + +_s = results.get('slope') or {} +_row('BM3', 'Check-size slope diff (Oz)', + None, + f'{_s["slope_diff"]:+.4f} ms/arcmin' if _s.get('slope_diff') is not None else 'N/A') + +_a = results.get('amplitude') or {} +_row('BM4', 'Amplitude ratio L/R (Oz)', + _a.get('flag'), + (f'{_a["ratio"]:.2f} (log₂={_a["log2_ratio"]:+.2f})' + if _a.get('ratio') is not None else 'N/A')) + +_b = results.get('bootstrap') or {} +_row('BM5', 'Bootstrap IOLD 95% CI', + (not _b.get('iold_excludes_zero')) if _b else None, + (f'[{_b["iold_ci_lo_ms"]:+.1f}, {_b["iold_ci_hi_ms"]:+.1f}] ms' + if _b and _b.get('iold_ci_lo_ms') is not None else 'N/A')) + +_w = results.get('wpeak') or {} +any_wpeak = any(v.get('flagged') for v in _w.values()) +_row('BM6', 'W-peak (bifurcated P100)', + any_wpeak if _w else None, + 'Flagged in: ' + ', '.join(e for e, v in _w.items() if v.get('flagged')) if any_wpeak else 'None detected') + +for eye_name, h7 in (results.get('hemi_o1o2') or {}).items(): + _row(f'BM7/{eye_name[:1]}', f'Hemi asym O1/O2 — {eye_name}', + h7.get('lat_flag') or h7.get('amp_flag'), + (f'lat diff={h7["lat_diff_ms"]:+.1f} ms, amp ratio={h7["amp_ratio"]:.2f}' + if h7 else 'N/A')) + +_row('BM8', 'Δ-asymmetry O1/O2 (eye-dependent?)', + None, _fmt_delta(results.get('hemi_delta_o1o2') or {})) + +for eye_name, h_lat in results.get('lateral_p7p8', {}).items(): + vals_9 = [f'{ch}: {v["propagation_ms"]:+.0f}ms' if v and v.get('propagation_ms') is not None else f'{ch}: N/A' + for ch, v in h_lat.items()] + any_oor = any(v and v.get('propagation_in_range') is False for v in h_lat.values()) + _row(f'BM9/{eye_name[:1]}', f'Lateral P7/P8 propagation — {eye_name}', + any_oor if h_lat else None, + ' '.join(vals_9)) + +_row('BM10', 'Δ-asymmetry P7/P8 (eye-dependent?)', + None, _fmt_delta(results.get('hemi_delta_p7p8') or {})) + +_row('BM11', 'Composite hemi Δ', + None, _fmt_delta(results.get('composite_delta') or {})) + +_topo = results.get('topology') or {} +topo_flags = [e for e, entry in _topo.items() + if entry and (entry.get('pz_gradient_ok') is False + or entry.get('fz_inversion_ok') is False)] +_row('BM12', 'Topology QC (Pz gradient + Fz inversion)', + bool(topo_flags) if _topo else None, + 'FLAG: ' + ', '.join(topo_flags) if topo_flags else ('OK' if _topo else 'Skipped (not LM ref)')) + +print(f"\n {'BM':<10} {'Name':<48} {'Status':<12} Value") +print(" " + "-"*90) +for row in _summary: + flag = row['flag'] + status_str = '⚑ FLAGGED' if flag is True else ('N/A' if flag is None else 'OK') + print(f" {row['id']:<10} {row['name']:<48} {status_str:<12} {row['value']}") + +############################################################################### +# ## Summary dashboard figure +# + +n_rows = len(_summary) +fig_sum, ax_sum = plt.subplots(figsize=(13, max(5, n_rows * 0.42 + 1.0))) + +bar_colors = ['#e74c3c' if r['flag'] is True + else ('#95a5a6' if r['flag'] is None + else '#27ae60') + for r in _summary] + +ax_sum.barh(range(n_rows), [1] * n_rows, color=bar_colors, alpha=0.85, height=0.7) + +for i, row in enumerate(reversed(_summary)): + y = i + flag = row['flag'] + status_str = '⚑ FLAGGED' if flag is True else ('N/A' if flag is None else 'OK') + # biomarker label on the left + ax_sum.text(-0.02, y, f"{row['id']}: {row['name']}", + ha='right', va='center', fontsize=9) + # status text inside bar + ax_sum.text(0.5, y, status_str, + ha='center', va='center', fontsize=9, + fontweight='bold', color='white') + # value on the right + ax_sum.text(1.02, y, row['value'], + ha='left', va='center', fontsize=8, color='#444444') + +ax_sum.set_xlim(-4.5, 4.5) +ax_sum.set_ylim(-0.5, n_rows - 0.5) +ax_sum.axis('off') +ax_sum.set_title(f'[{ref_label}] Biomarker Summary Dashboard\n' + 'Green = OK Red = Flagged Grey = N/A or not computed', + fontsize=11, pad=12) +fig_sum.tight_layout() +plt.show() + +############################################################################### +# ## Persist biomarkers to disk +# +# Read-merge-write into ``biomarkers.json``: this run's REF_SCHEME slot is +# updated; other ref schemes already persisted from prior runs are preserved. +# Run the notebook once per REF_SCHEME to populate both keys. +# + +biomarker_path = recording_dir / 'biomarkers.json' +if biomarker_path.exists(): + with open(biomarker_path, 'r', encoding='utf-8') as f: + biomarker_payload = json.load(f) + biomarker_payload.setdefault('references', {}) +else: + biomarker_payload = {'references': {}} + +biomarker_payload.update({ + 'subject_id': SUBJECT_ID, + 'session_nb': SESSION_NB, + 'device_name': DEVICE_NAME, + 'experiment': EXPERIMENT, + 'site': SITE, + 'display': DISPLAY, + 'montage': MONTAGE, + 'analysis_timestamp': datetime.datetime.now().isoformat(timespec='seconds'), + 'link_panel_lag_ms': link_panel_lag * 1000.0, + 'link_panel_lag_err_ms': link_panel_lag_err * 1000.0, + 'pc_lag_ms_mean': float(pc_lag_s.mean() * 1000.0), + 'pc_lag_ms_std': float(pc_lag_s.std() * 1000.0), + 'n_recordings': len(recording_files), +}) +biomarker_payload['references'][ref_label] = results + +with open(biomarker_path, 'w', encoding='utf-8') as f: + json.dump(biomarker_payload, f, indent=2, ensure_ascii=False) +print(f"\n[persist] biomarkers written to: {biomarker_path}") +print(f"[persist] reference schemes now persisted: {list(biomarker_payload['references'])}") diff --git a/examples/visual_vep/02r__pattern_reversal_longitudinal.py b/examples/visual_vep/02r__pattern_reversal_longitudinal.py new file mode 100644 index 000000000..811a3d594 --- /dev/null +++ b/examples/visual_vep/02r__pattern_reversal_longitudinal.py @@ -0,0 +1,337 @@ +# --- +# jupyter: +# jupytext: +# formats: ipynb,py:sphinx +# text_representation: +# extension: .py +# format_name: sphinx +# format_version: '1.1' +# jupytext_version: 1.19.1 +# kernelspec: +# display_name: eeg-experiments +# language: python +# name: python3 +# --- + +""" + +# Pattern Reversal VEP: Longitudinal Analysis + +Aggregates per-session biomarker JSON files written by +``01r__pattern_reversal_viz.py`` into a single per-subject longitudinal +trend view. Each prior session must have been analysed by 01r at least +once (so its ``biomarkers.json`` exists in the recording directory); +this script does **not** recompute biomarkers from raw EEG — it reads +the persisted JSON and plots trends across sessions. + +Why this split: the per-session analysis is expensive (load EEG, +filter, epoch, bootstrap), but the trend view is cheap (read JSON, +plot). Persisting biomarkers per session means new longitudinal points +are added in seconds rather than minutes, and individual sessions can +be re-analysed without invalidating the rest of the series. + +Outputs: + +- A summary DataFrame indexed by session, with one row per (session, + reference scheme) pair. +- A trend figure showing IOLD, per-eye P100 latency, check-size slope + difference, and the O1/O2 and P7/P8 Δ-asymmetry contrasts as a + function of session. +- Bootstrap CI bands around the IOLD trend so a real shift is visually + separable from session noise. + +""" + +############################################################################### +# ## Setup +# +# + +import json +import warnings +warnings.filterwarnings('ignore') + +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +plt.ion() + +from eegnb import get_recording_dir + +# sphinx_gallery_thumbnail_number = 1 + +############################################################################### +# ## Configure subject / experiment selectors +# +# Change these placeholders to point at the subject + experiment + site whose +# sessions you want to plot. The script will glob every session directory it +# finds under that path and load each session's ``biomarkers.json``. +# + +# --- CHANGE THESE PLACEHOLDERS TO POINT AT YOUR OWN SUBJECT --------------- +SUBJECT_ID = 0 # placeholder — your subject number +DEVICE_NAME = 'cyton' +EXPERIMENT = 'visual-PRVEP' +DISPLAY = 'quest-2_120Hz' # display tag in the site path +MONTAGE = 'cap' # 'cap' or 'mark-iv' +SITE = f'{DISPLAY}_{MONTAGE}' +# -------------------------------------------------------------------------- + +# Reference scheme to plot as the primary line (the other is overlaid lighter). +PRIMARY_REF = 'Linked Mastoid M1+M2' # alternative: 'Fz (ISCEV)' + +############################################################################### +# ## Discover session JSON files +# +# Each session's ``biomarkers.json`` lives in the per-session recording dir. +# We use SESSION_NB = 0 just to anchor the path (we then walk one level up to +# find every sibling session directory). +# + +anchor_dir = get_recording_dir(DEVICE_NAME, EXPERIMENT, SUBJECT_ID, 0, site=SITE) +subject_dir = anchor_dir.parent # .../subject{SID}/ +print(f"[scan] subject dir: {subject_dir}") + +session_dirs = sorted(p for p in subject_dir.glob('session*') if p.is_dir()) +print(f"[scan] found {len(session_dirs)} session directories") + +session_jsons = [] +for sd in session_dirs: + bj = sd / 'biomarkers.json' + if bj.exists(): + session_jsons.append(bj) + else: + print(f"[skip] {sd.name}: no biomarkers.json (run 01r on it first)") + +if not session_jsons: + raise RuntimeError( + f"No biomarkers.json files found under {subject_dir}. " + "Run 01r__pattern_reversal_viz.py against each session first to " + "generate the per-session biomarker payloads." + ) + +print(f"[scan] {len(session_jsons)} session(s) have biomarkers.json") + +############################################################################### +# ## Load and flatten into a DataFrame +# +# One row per (session, reference scheme), with biomarker fields flattened +# into named columns. Fields that aren't present in a session land as NaN. +# + + +def flatten_session(payload): + """One dict per ref scheme in a session payload, with metadata + biomarkers.""" + rows = [] + meta = { + 'subject_id': payload.get('subject_id'), + 'session_nb': payload.get('session_nb'), + 'analysis_timestamp': payload.get('analysis_timestamp'), + 'site': payload.get('site'), + 'montage': payload.get('montage'), + 'n_trials_kept_overall': payload.get('n_trials_kept'), + 'pc_lag_ms_mean': payload.get('pc_lag_ms_mean'), + } + for ref_label, ref_block in (payload.get('references') or {}).items(): + if ref_block is None: + continue + row = dict(meta) + row['ref'] = ref_label + row['n_trials_kept'] = ref_block.get('n_trials_kept') + + iold = ref_block.get('iold') or {} + row['p100_left_ms'] = iold.get('p100_left_ms') + row['p100_right_ms'] = iold.get('p100_right_ms') + row['p100_left_uv'] = iold.get('p100_left_uv') + row['p100_right_uv'] = iold.get('p100_right_uv') + row['iold_ms'] = iold.get('iold_ms') + row['iold_flag'] = iold.get('flag') + + slope = ref_block.get('slope') or {} + row['slope_left'] = slope.get('slope_left_ms_per_arcmin') + row['slope_right'] = slope.get('slope_right_ms_per_arcmin') + row['slope_diff'] = slope.get('slope_diff') + + amp = ref_block.get('amplitude') or {} + row['amp_ratio'] = amp.get('ratio') + row['amp_log2'] = amp.get('log2_ratio') + + boot = ref_block.get('bootstrap') or {} + row['boot_iold_median'] = boot.get('iold_median_ms') + row['boot_iold_lo'] = boot.get('iold_ci_lo_ms') + row['boot_iold_hi'] = boot.get('iold_ci_hi_ms') + row['boot_left_lo'] = boot.get('left_p100_ci_lo_ms') + row['boot_left_hi'] = boot.get('left_p100_ci_hi_ms') + row['boot_right_lo'] = boot.get('right_p100_ci_lo_ms') + row['boot_right_hi'] = boot.get('right_p100_ci_hi_ms') + + hd_o1o2 = ref_block.get('hemi_delta_o1o2') or {} + row['delta_lat_o1o2'] = hd_o1o2.get('d_lat') + row['delta_log2_o1o2'] = hd_o1o2.get('d_log2') + + hd_p7p8 = ref_block.get('hemi_delta_p7p8') or {} + row['delta_lat_p7p8'] = hd_p7p8.get('d_lat') + row['delta_log2_p7p8'] = hd_p7p8.get('d_log2') + + comp_d = ref_block.get('composite_delta') or {} + row['composite_d_lat'] = comp_d.get('d_lat') + row['composite_d_log2'] = comp_d.get('d_log2') + + rows.append(row) + return rows + + +all_rows = [] +for jp in session_jsons: + with open(jp, 'r', encoding='utf-8') as f: + payload = json.load(f) + all_rows.extend(flatten_session(payload)) + +df = pd.DataFrame(all_rows).sort_values(['session_nb', 'ref']).reset_index(drop=True) +print(f"\n[load] longitudinal dataframe: {len(df)} rows, {len(df['session_nb'].unique())} sessions, " + f"{len(df['ref'].unique())} reference scheme(s)") +print(df[['session_nb', 'ref', 'n_trials_kept', 'iold_ms', 'slope_diff', + 'delta_lat_o1o2', 'delta_lat_p7p8']].to_string(index=False)) + +############################################################################### +# ## Trend figure +# +# Six panels: +# 1. IOLD over sessions, with bootstrap 95% CI band on the primary ref. +# ±8 ms clinical threshold drawn as horizontal guides. +# 2. Per-eye P100 latency, with bootstrap CI bands. +# 3. Check-size slope difference (L − R, ms / arcmin). +# 4. O1/O2 inter-ocular Δ-asymmetry (latency). +# 5. P7/P8 inter-ocular Δ-asymmetry (latency). +# 6. Inter-ocular amplitude ratio (log2). +# + +fig, axes = plt.subplots(2, 3, figsize=(18, 10)) +ax_iold, ax_p100, ax_slope, ax_d_o1o2, ax_d_p7p8, ax_amp = axes.flatten() + +ref_styles = { + PRIMARY_REF: dict(color='#2c3e50', linewidth=2.0, alpha=1.0, marker='o'), +} +# Lighter style for the secondary reference scheme. +for ref in df['ref'].unique(): + if ref != PRIMARY_REF: + ref_styles[ref] = dict(color='#95a5a6', linewidth=1.2, alpha=0.6, marker='s', linestyle='--') + +# --- 1. IOLD over time ----------------------------------------------------- +for ref, sub in df.groupby('ref'): + style = ref_styles.get(ref, dict(color='gray')) + ax_iold.plot(sub['session_nb'], sub['iold_ms'], label=f'{ref} (point)', **style) + if ref == PRIMARY_REF and sub['boot_iold_lo'].notna().any(): + ax_iold.fill_between(sub['session_nb'], sub['boot_iold_lo'], sub['boot_iold_hi'], + color=style['color'], alpha=0.15, label=f'{ref} (95% CI)') +ax_iold.axhline(8.0, color='#c0392b', linestyle=':', alpha=0.6, label='±8 ms clinical threshold') +ax_iold.axhline(-8.0, color='#c0392b', linestyle=':', alpha=0.6) +ax_iold.axhline(0, color='black', linestyle='-', alpha=0.3) +ax_iold.set_title('IOLD (L − R P100 latency) over sessions') +ax_iold.set_xlabel('Session number') +ax_iold.set_ylabel('IOLD (ms)') +ax_iold.grid(True, alpha=0.3) +ax_iold.legend(loc='best', fontsize=8) + +# --- 2. Per-eye P100 latency ---------------------------------------------- +for ref, sub in df.groupby('ref'): + style = ref_styles.get(ref, dict(color='gray')) + is_primary = (ref == PRIMARY_REF) + ax_p100.plot(sub['session_nb'], sub['p100_left_ms'], color='#2980b9', + marker='o' if is_primary else 's', + linestyle='-' if is_primary else '--', + alpha=style['alpha'], linewidth=style['linewidth'], + label=f'Left eye [{ref}]') + ax_p100.plot(sub['session_nb'], sub['p100_right_ms'], color='#c0392b', + marker='o' if is_primary else 's', + linestyle='-' if is_primary else '--', + alpha=style['alpha'], linewidth=style['linewidth'], + label=f'Right eye [{ref}]') + if is_primary and sub['boot_left_lo'].notna().any(): + ax_p100.fill_between(sub['session_nb'], sub['boot_left_lo'], sub['boot_left_hi'], + color='#2980b9', alpha=0.15) + ax_p100.fill_between(sub['session_nb'], sub['boot_right_lo'], sub['boot_right_hi'], + color='#c0392b', alpha=0.15) +ax_p100.set_title('Per-eye P100 latency over sessions') +ax_p100.set_xlabel('Session number') +ax_p100.set_ylabel('P100 latency (ms)') +ax_p100.grid(True, alpha=0.3) +ax_p100.legend(loc='best', fontsize=7) + +# --- 3. Check-size slope difference --------------------------------------- +for ref, sub in df.groupby('ref'): + style = ref_styles.get(ref, dict(color='gray')) + ax_slope.plot(sub['session_nb'], sub['slope_diff'], label=ref, **style) +ax_slope.axhline(0, color='black', linestyle='-', alpha=0.3) +ax_slope.set_title('Inter-ocular check-size slope difference (L − R)') +ax_slope.set_xlabel('Session number') +ax_slope.set_ylabel('Δ slope (ms / arcmin)') +ax_slope.grid(True, alpha=0.3) +ax_slope.legend(loc='best', fontsize=8) + +# --- 4. O1/O2 Δ-asymmetry -------------------------------------------------- +for ref, sub in df.groupby('ref'): + style = ref_styles.get(ref, dict(color='gray')) + ax_d_o1o2.plot(sub['session_nb'], sub['delta_lat_o1o2'], label=ref, **style) +ax_d_o1o2.axhline(0, color='black', linestyle='-', alpha=0.3) +ax_d_o1o2.set_title('O1/O2 inter-ocular Δ-asymmetry (latency)') +ax_d_o1o2.set_xlabel('Session number') +ax_d_o1o2.set_ylabel('Δlat (ms) — eye-dependent skew') +ax_d_o1o2.grid(True, alpha=0.3) +ax_d_o1o2.legend(loc='best', fontsize=8) + +# --- 5. P7/P8 Δ-asymmetry -------------------------------------------------- +for ref, sub in df.groupby('ref'): + style = ref_styles.get(ref, dict(color='gray')) + ax_d_p7p8.plot(sub['session_nb'], sub['delta_lat_p7p8'], label=ref, **style) +ax_d_p7p8.axhline(0, color='black', linestyle='-', alpha=0.3) +ax_d_p7p8.set_title('P7/P8 inter-ocular Δ-asymmetry (latency)') +ax_d_p7p8.set_xlabel('Session number') +ax_d_p7p8.set_ylabel('Δlat (ms) — eye-dependent skew') +ax_d_p7p8.grid(True, alpha=0.3) +ax_d_p7p8.legend(loc='best', fontsize=8) + +# --- 6. Amplitude ratio (log2) -------------------------------------------- +for ref, sub in df.groupby('ref'): + style = ref_styles.get(ref, dict(color='gray')) + ax_amp.plot(sub['session_nb'], sub['amp_log2'], label=ref, **style) +ax_amp.axhline(1.0, color='#c0392b', linestyle=':', alpha=0.6, label='±1 log2 threshold') +ax_amp.axhline(-1.0, color='#c0392b', linestyle=':', alpha=0.6) +ax_amp.axhline(0, color='black', linestyle='-', alpha=0.3) +ax_amp.set_title('Inter-ocular amplitude ratio over sessions') +ax_amp.set_xlabel('Session number') +ax_amp.set_ylabel('log2(L / R)') +ax_amp.grid(True, alpha=0.3) +ax_amp.legend(loc='best', fontsize=8) + +fig.suptitle(f'PR-VEP longitudinal trends — subject {SUBJECT_ID:04d}, {SITE}', + fontsize=14, fontweight='bold') +fig.tight_layout() +plt.show() + +############################################################################### +# ## Baseline summary +# +# Treat the first 3–5 sessions (or all sessions before a known intervention) +# as the baseline, and report the mean ± std of each biomarker. This bracket +# is what subsequent sessions need to fall outside of to count as a real shift. +# + +BASELINE_LAST_SESSION_NB = None # set to e.g. 4 to mark sessions <= 4 as baseline + +if BASELINE_LAST_SESSION_NB is not None: + baseline_mask = df['session_nb'] <= BASELINE_LAST_SESSION_NB +else: + baseline_mask = slice(None) + print("[baseline] BASELINE_LAST_SESSION_NB not set — using ALL sessions as baseline. " + "Edit the constant above to define a baseline window.") + +baseline_df = df.loc[baseline_mask] if BASELINE_LAST_SESSION_NB is not None else df +metrics = ['iold_ms', 'slope_diff', 'amp_log2', + 'delta_lat_o1o2', 'delta_lat_p7p8', + 'p100_left_ms', 'p100_right_ms'] + +primary = baseline_df[baseline_df['ref'] == PRIMARY_REF] +if len(primary) > 0: + print(f"\n[baseline] reference = {PRIMARY_REF}, n_sessions = {len(primary)}") + print(primary[metrics].agg(['mean', 'std']).T.to_string()) From 891e4c581a764bc835f34e932537642b7379f281 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 4 May 2026 16:52:49 +1000 Subject: [PATCH 65/94] refactor(vep): remove legacy v1 marker support (KISS) - Removed the complicated state-machine logic used to decode v1 markers from block-start codes. - The pipeline now expects v2 markers (where both eye and size are fully encoded into integers 1-4) by default. - Removed bitwise math comments to clarify the condition-to-integer mapping. --- .../visual_vep/01r__pattern_reversal_viz.py | 43 ++++--------------- 1 file changed, 9 insertions(+), 34 deletions(-) diff --git a/examples/visual_vep/01r__pattern_reversal_viz.py b/examples/visual_vep/01r__pattern_reversal_viz.py index 2cd37cb9d..95c0c6df7 100644 --- a/examples/visual_vep/01r__pattern_reversal_viz.py +++ b/examples/visual_vep/01r__pattern_reversal_viz.py @@ -407,18 +407,12 @@ ############################################################################### # ## Condition decoding # -# Marker scheme. Two recording-format generations exist: +# Marker scheme: +# Reversal codes carry both eye and size (1–4). +# Block-start markers (100-103) are pushed at the start of each block but are redundant for trial epoching. # -# v1 (legacy): reversal codes carry only eye (1 = left, 2 = right). Size -# must be recovered from the surrounding block-start marker (100–103). -# v2 (current): reversal codes carry both eye and size (1–4), matching the -# block-start codes 1:1. Block-start markers are still pushed but are -# now redundant for recoding. -# -# Block-start codes (unchanged across versions): -# 100 = left/large, 101 = right/large, 102 = left/small, 103 = right/small -# -# Target condition codes (== v2 reversal codes; v1 is recoded into this space): +# Condition codes: + COND_TO_INT = { ('left_eye', 'large'): 1, ('right_eye', 'large'): 2, @@ -432,29 +426,10 @@ 103: ('right_eye', 'small'), } -# Detect format from the codes actually present in the recording. -reversal_codes_present = set(events[:, 2]) - set(BLOCK_START_CODES) -is_v2 = bool(reversal_codes_present - {1, 2}) # any code > 2 ⇒ v2 -print(f"[events] marker scheme detected: {'v2 (per-condition reversals)' if is_v2 else 'v1 (eye-only reversals, recoding via block-start)'}") - -# Walk the raw event array; emit one fully-labeled reversal per input reversal. -recoded = [] -recoded_corr = [] -cur_cond = None -for (samp, _, code), (samp_corr, _, _) in zip(events, events_corrected): - if code in BLOCK_START_CODES: - cur_cond = COND_TO_INT[BLOCK_START_CODES[code]] - elif is_v2 and code in COND_TO_INT.values(): - recoded.append([samp, 0, code]) - recoded_corr.append([samp_corr, 0, code]) - elif (not is_v2) and code in (1, 2) and cur_cond is not None: - recoded.append([samp, 0, cur_cond]) - recoded_corr.append([samp_corr, 0, cur_cond]) - -recoded_events = (np.array(recoded, dtype=int) - if recoded else np.zeros((0, 3), dtype=int)) -events_corrected = (np.array(recoded_corr, dtype=int) - if recoded_corr else np.zeros((0, 3), dtype=int)) +# Drop block-start markers (100-103), keeping only the actual reversal markers (1-4). +mask = np.isin(events[:, 2], list(COND_TO_INT.values())) +recoded_events = events[mask] +events_corrected = events_corrected[mask] # Keep backward-compat alias so later cells can use `events` for per-trial lag. events = recoded_events From 5d16ed55cde2fb59f57655bef757a58458a94942 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 4 May 2026 17:35:28 +1000 Subject: [PATCH 66/94] refactor: remove backwards compatible event code from viz script --- .../visual_vep/01r__pattern_reversal_viz.py | 36 +++++-------------- 1 file changed, 8 insertions(+), 28 deletions(-) diff --git a/examples/visual_vep/01r__pattern_reversal_viz.py b/examples/visual_vep/01r__pattern_reversal_viz.py index 95c0c6df7..d6975ae42 100644 --- a/examples/visual_vep/01r__pattern_reversal_viz.py +++ b/examples/visual_vep/01r__pattern_reversal_viz.py @@ -419,28 +419,19 @@ ('left_eye', 'small'): 3, ('right_eye', 'small'): 4, } -BLOCK_START_CODES = { - 100: ('left_eye', 'large'), - 101: ('right_eye', 'large'), - 102: ('left_eye', 'small'), - 103: ('right_eye', 'small'), -} # Drop block-start markers (100-103), keeping only the actual reversal markers (1-4). mask = np.isin(events[:, 2], list(COND_TO_INT.values())) -recoded_events = events[mask] +events = events[mask] events_corrected = events_corrected[mask] -# Keep backward-compat alias so later cells can use `events` for per-trial lag. -events = recoded_events - ############################################################################### # ## Epoching parameters # event_id = {f"{eye}/{size}": code for (eye, size), code in COND_TO_INT.items()} for cond, cid in event_id.items(): - n = int((recoded_events[:, 2] == cid).sum()) + n = int((events[:, 2] == cid).sum()) print(f"[events] {cond}: {n}") PICK_CH = 'Oz' # ISCEV-standard electrode @@ -458,7 +449,7 @@ # Topology QC channels: Pz gradient + Fz Halliday inversion. Fz is absent # when it is the hardware reference (session 016+), so filter against what's # actually recorded to avoid pick errors downstream. -TOPOLOGY_CHANNELS = [ch for ch in ['Pz', 'Fz'] if ch in raw_ref.ch_names] +TOPOLOGY_CHANNELS = [ch for ch in ['Pz', 'Fz'] if ch in raw.ch_names] ALL_PICK_CHANNELS = [PICK_CH] + HEMI_CHANNELS + LATERAL_CHANNELS + TOPOLOGY_CHANNELS REJECT_UV = 150e-6 BASELINE = (-0.1, 0) @@ -535,7 +526,7 @@ # ## Epoching # -ch_epochs = Epochs(raw_ref, events=recoded_events, event_id=event_id, +ch_epochs = Epochs(raw_ref, events=events, event_id=event_id, tmin=-0.1, tmax=0.4, baseline=BASELINE, reject={'eeg': REJECT_UV}, preload=True, verbose=False, picks=ALL_PICK_CHANNELS, @@ -543,14 +534,14 @@ ch_epochs.shift_time(-link_panel_lag) n_total = len(ch_epochs) -drop_pct = (1 - n_total / len(recoded_events)) * 100 +drop_pct = (1 - n_total / len(events)) * 100 print(f"\n[{PICK_CH}] reject ptp={REJECT_UV * 1e6:.0f} uV " - f"kept {n_total}/{len(recoded_events)} ({drop_pct:.1f}% dropped)") -results['n_trials_total'] = int(len(recoded_events)) + f"kept {n_total}/{len(events)} ({drop_pct:.1f}% dropped)") +results['n_trials_total'] = int(len(events)) results['n_trials_kept'] = int(n_total) results['drop_pct'] = _f(drop_pct) results['n_per_condition'] = { - cond: int((recoded_events[:, 2] == cid).sum()) for cond, cid in event_id.items() + cond: int((events[:, 2] == cid).sum()) for cond, cid in event_id.items() } # Corrected-events epochs on the same kept trials. @@ -600,18 +591,7 @@ def avg_eyes(ep, eye_prefix): # Oz SNR: best detected P100 / Oz baseline RMS oz_idx = ch_names_ep.index('Oz') oz_rms = baseline_rms[oz_idx] -best_p100_uv = max( - (abs(p['amplitude']) * 1e6 for p in [p100_left, p100_right] if p is not None), - default=None -) print(f"\nOz baseline RMS = {oz_rms:.2f} µV group median = {med_rms:.2f} µV") -if best_p100_uv is not None: - oz_snr = best_p100_uv / oz_rms - snr_ok = oz_snr >= OZ_SNR_MIN - print(f"Oz P100 SNR = {oz_snr:.2f} (recommended ≥ {OZ_SNR_MIN}) " - f"[{'ok' if snr_ok else '⚑ LOW — collect more trials'}]") -else: - print("Oz SNR: cannot compute — P100 not detected at Oz") flagged_chs = [ch for ch, v in quality_flags.items() if v['flag']] if flagged_chs: From 4eb0fe43785772f6808a00ea478289e3f51b39dd Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 4 May 2026 17:45:15 +1000 Subject: [PATCH 67/94] feat(vep): enhance visualization and update reference scheme - Split Oz evoked plots into two distinct cells (Large vs Small checks) for better negative space and intuitive side-by-side L/R eye comparison. - Switched default REF_SCHEME to 'Mastoid M2' and added comment explaining why M1 was too noisy for linked mastoids in session 016, allowing BM12 (Halliday inversion) to compute. --- .../visual_vep/01r__pattern_reversal_viz.py | 62 +++++++++++++------ 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/examples/visual_vep/01r__pattern_reversal_viz.py b/examples/visual_vep/01r__pattern_reversal_viz.py index d6975ae42..89e6304ab 100644 --- a/examples/visual_vep/01r__pattern_reversal_viz.py +++ b/examples/visual_vep/01r__pattern_reversal_viz.py @@ -492,7 +492,7 @@ # with the recorded M2, giving Oz-(M1+M2)/2 after the algebra. # -REF_SCHEME = 'Fz (ISCEV)' # 'Fz (ISCEV)' or 'Linked Mastoid M1+M2' +REF_SCHEME = 'Mastoid M2' # 'Fz (ISCEV)', 'Linked Mastoid M1+M2', or 'Mastoid M2' if REF_SCHEME == 'Fz (ISCEV)': raw_ref = raw.copy() @@ -513,6 +513,11 @@ raw_ref.add_channels([m1_zero]) # M1 is a real recorded channel (session 016+) or the synthesised zero above raw_ref.set_eeg_reference(ref_channels=['M1', 'M2']) +elif REF_SCHEME == 'Mastoid M2': + raw_ref = raw.copy() + # Note: For Session 016, M1 was too noisy for re-referencing to do linked mastoids, + # so just one mastoid (M2) re-ref is used here to allow the Halliday Fz inversion check. + raw_ref.set_eeg_reference(ref_channels=['M2']) else: raise ValueError(f'Unknown REF_SCHEME: {REF_SCHEME!r}') @@ -683,35 +688,54 @@ def plot_ch(ax, data, color, eye_label, sem=None, data_mean_corr=None, times_mea ax.axhline(y=0, color='black', linestyle='-', alpha=0.3) ax.axvline(x=0, color='black', linestyle='--', alpha=0.5) -fig, (ax_large, ax_small) = plt.subplots(1, 2, figsize=(16, 6), sharey=True) +fig_large, (ax_left_large, ax_right_large) = plt.subplots(1, 2, figsize=(16, 6), sharey=True) -plot_ch(ax_large, left_corr_large, 'blue', 'Left Eye', sem=left_sem_large, +plot_ch(ax_left_large, left_corr_large, 'blue', 'Left Eye', sem=left_sem_large, data_mean_corr=left_data_large, times_mean_corr=times_mean_corr) -plot_ch(ax_large, right_corr_large, 'red', 'Right Eye', sem=right_sem_large, - data_mean_corr=right_data_large, times_mean_corr=times_mean_corr) - for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax_large.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) + ax_left_large.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) +ax_left_large.set_title(f'[{ref_label}] Large Checks: Left Eye — {PICK_CH}') +handles, lbls = ax_left_large.get_legend_handles_labels() +ax_left_large.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), + fontsize=10, loc='upper right') -ax_large.set_title(f'[{ref_label}] Large Checks: Left vs Right Eye — {PICK_CH}') -handles, lbls = ax_large.get_legend_handles_labels() -ax_large.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), +plot_ch(ax_right_large, right_corr_large, 'red', 'Right Eye', sem=right_sem_large, + data_mean_corr=right_data_large, times_mean_corr=times_mean_corr) +for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax_right_large.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) +ax_right_large.set_title(f'[{ref_label}] Large Checks: Right Eye — {PICK_CH}') +handles, lbls = ax_right_large.get_legend_handles_labels() +ax_right_large.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), fontsize=10, loc='upper right') -plot_ch(ax_small, left_corr_small, 'blue', 'Left Eye', sem=left_sem_small, - data_mean_corr=left_data_small, times_mean_corr=times_mean_corr) -plot_ch(ax_small, right_corr_small, 'red', 'Right Eye', sem=right_sem_small, - data_mean_corr=right_data_small, times_mean_corr=times_mean_corr) +fig_large.tight_layout() +plt.show() +############################################################################### +# ## Oz evoked: small checks +# + +fig_small, (ax_left_small, ax_right_small) = plt.subplots(1, 2, figsize=(16, 6), sharey=True) + +plot_ch(ax_left_small, left_corr_small, 'blue', 'Left Eye', sem=left_sem_small, + data_mean_corr=left_data_small, times_mean_corr=times_mean_corr) for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax_small.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) + ax_left_small.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) +ax_left_small.set_title(f'[{ref_label}] Small Checks: Left Eye — {PICK_CH}') +handles, lbls = ax_left_small.get_legend_handles_labels() +ax_left_small.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), + fontsize=10, loc='upper right') -ax_small.set_title(f'[{ref_label}] Small Checks: Left vs Right Eye — {PICK_CH}') -handles, lbls = ax_small.get_legend_handles_labels() -ax_small.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), +plot_ch(ax_right_small, right_corr_small, 'red', 'Right Eye', sem=right_sem_small, + data_mean_corr=right_data_small, times_mean_corr=times_mean_corr) +for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): + ax_right_small.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) +ax_right_small.set_title(f'[{ref_label}] Small Checks: Right Eye — {PICK_CH}') +handles, lbls = ax_right_small.get_legend_handles_labels() +ax_right_small.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), fontsize=10, loc='upper right') -fig.tight_layout() +fig_small.tight_layout() plt.show() ############################################################################### From 9839fef9d8f079340ae966a0b1fd24e6596172aa Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 4 May 2026 18:05:14 +1000 Subject: [PATCH 68/94] feat(vep): compute BM12 topology check by locally re-referencing to M2 - Kept overall pipeline referenced to Fz (ISCEV) for KISS compliance. - Modified BM12 to temporarily re-reference to M2 locally, enabling the Halliday Fz polarity inversion check even when M1 is too noisy for a linked mastoid reference. --- .../visual_vep/01r__pattern_reversal_viz.py | 151 +++++++++--------- 1 file changed, 73 insertions(+), 78 deletions(-) diff --git a/examples/visual_vep/01r__pattern_reversal_viz.py b/examples/visual_vep/01r__pattern_reversal_viz.py index 89e6304ab..03b6c920f 100644 --- a/examples/visual_vep/01r__pattern_reversal_viz.py +++ b/examples/visual_vep/01r__pattern_reversal_viz.py @@ -492,7 +492,7 @@ # with the recorded M2, giving Oz-(M1+M2)/2 after the algebra. # -REF_SCHEME = 'Mastoid M2' # 'Fz (ISCEV)', 'Linked Mastoid M1+M2', or 'Mastoid M2' +REF_SCHEME = 'Fz (ISCEV)' # 'Fz (ISCEV)' or 'Linked Mastoid M1+M2' if REF_SCHEME == 'Fz (ISCEV)': raw_ref = raw.copy() @@ -513,11 +513,6 @@ raw_ref.add_channels([m1_zero]) # M1 is a real recorded channel (session 016+) or the synthesised zero above raw_ref.set_eeg_reference(ref_channels=['M1', 'M2']) -elif REF_SCHEME == 'Mastoid M2': - raw_ref = raw.copy() - # Note: For Session 016, M1 was too noisy for re-referencing to do linked mastoids, - # so just one mastoid (M2) re-ref is used here to allow the Halliday Fz inversion check. - raw_ref.set_eeg_reference(ref_channels=['M2']) else: raise ValueError(f'Unknown REF_SCHEME: {REF_SCHEME!r}') @@ -1774,80 +1769,80 @@ def plot_ch(ax, data, color, eye_label, sem=None, data_mean_corr=None, times_mea # results['topology'] = None -if 'linked' in ref_label.lower() or 'mastoid' in ref_label.lower(): - print("\n--- BM12: Topology QC (Pz gradient + Fz Halliday inversion) ---") +print("\n--- BM12: Topology QC (Pz gradient + Fz Halliday inversion) ---") - topology_results = {} - for eye_name, ev_avg, oz_p100 in [ - ('Left Eye', evoked_left_corr_avg, p100_left), - ('Right Eye', evoked_right_corr_avg, p100_right), - ]: - if ev_avg is None or oz_p100 is None: - print(f"[BM12 {eye_name}] Oz P100 not detected — skipping") - continue +topology_results = {} +for eye_name, ev_avg, oz_p100 in [ + ('Left Eye', evoked_left_corr_avg, p100_left), + ('Right Eye', evoked_right_corr_avg, p100_right), +]: + if ev_avg is None or oz_p100 is None: + print(f"[BM12 {eye_name}] Oz P100 not detected — skipping") + continue - oz_lat_s = oz_p100['latency'] - oz_amp_uv = oz_p100['amplitude'] * 1e6 - t_idx = int(round((oz_lat_s - ev_avg.tmin) * ev_avg.info['sfreq'])) - t_idx = max(0, min(t_idx, ev_avg.data.shape[1] - 1)) - - entry = {'oz_amp_uv': _f(oz_amp_uv), 'pz_amp_uv': None, 'fz_amp_uv': None, - 'pz_gradient_ok': None, 'fz_inversion_ok': None} - - if 'Pz' in ev_avg.ch_names: - pz_amp = ev_avg.data[ev_avg.ch_names.index('Pz'), t_idx] * 1e6 - pz_ok = 0 < pz_amp < oz_amp_uv - pz_str = 'OK (positive, < Oz)' if pz_ok else 'FLAG: gradient broken' - print(f"[BM12 {eye_name}] Pz @ {oz_lat_s*1000:.1f} ms: {pz_amp:+.2f} µV " - f"(Oz = {oz_amp_uv:+.2f} µV) [{pz_str}]") - entry['pz_amp_uv'] = _f(pz_amp) - entry['pz_gradient_ok'] = bool(pz_ok) - - if 'Fz' in ev_avg.ch_names: - fz_amp = ev_avg.data[ev_avg.ch_names.index('Fz'), t_idx] * 1e6 - if abs(fz_amp) < 0.2: - print(f"[BM12 {eye_name}] Fz: {fz_amp:+.2f} µV " - f"[INACTIVE — Fz is the reference]") - entry['fz_amp_uv'] = _f(fz_amp) - entry['fz_inversion_ok'] = None - else: - fz_ok = fz_amp < 0 - fz_str = ('OK (inverted ⇒ V1 generator confirmed)' - if fz_ok else 'FLAG: same-sign as Oz') - print(f"[BM12 {eye_name}] Fz @ {oz_lat_s*1000:.1f} ms: {fz_amp:+.2f} µV " - f"(Oz = {oz_amp_uv:+.2f} µV) [{fz_str}]") - entry['fz_amp_uv'] = _f(fz_amp) - entry['fz_inversion_ok'] = bool(fz_ok) - - topology_results[eye_name] = entry - - results['topology'] = topology_results - - if topology_results: - fig_bm12, ax_bm12 = plt.subplots(figsize=(8, 5)) - eyes_t = list(topology_results.keys()) - x_t = np.arange(len(eyes_t)) - w_t = 0.22 - ch_order = [('oz_amp_uv', 'Oz', 'black'), - ('pz_amp_uv', 'Pz', '#2ca02c'), - ('fz_amp_uv', 'Fz', '#ff7f0e')] - for i, (key, label, color) in enumerate(ch_order): - vals = [topology_results.get(eye, {}).get(key) or 0 for eye in eyes_t] - ax_bm12.bar(x_t + (i - 1) * w_t, vals, w_t, - color=color, alpha=0.75, label=label) - ax_bm12.axhline(0, color='black', lw=0.8) - ax_bm12.set_xticks(x_t) - ax_bm12.set_xticklabels(eyes_t) - ax_bm12.set_ylabel('Amplitude at Oz-P100 latency (µV)') - ax_bm12.set_title(f'[{ref_label}] BM12: Topology QC\n' - 'Oz > 0, Pz > 0 (gradient), Fz < 0 (Halliday inversion)') - ax_bm12.legend() - ax_bm12.grid(axis='y', alpha=0.3) - fig_bm12.tight_layout() - plt.show() -else: - print("\n[BM12] Topology QC skipped — requires Linked Mastoid reference " - "(run again with REF_SCHEME = 'Linked Mastoid M1+M2')") + oz_lat_s = oz_p100['latency'] + t_idx = int(round((oz_lat_s - ev_avg.tmin) * ev_avg.info['sfreq'])) + t_idx = max(0, min(t_idx, ev_avg.data.shape[1] - 1)) + + oz_val = ev_avg.data[ev_avg.ch_names.index('Oz'), t_idx] * 1e6 + pz_val = ev_avg.data[ev_avg.ch_names.index('Pz'), t_idx] * 1e6 if 'Pz' in ev_avg.ch_names else None + fz_val = ev_avg.data[ev_avg.ch_names.index('Fz'), t_idx] * 1e6 if 'Fz' in ev_avg.ch_names else 0.0 + + if 'M2' in ev_avg.ch_names: + m2_val = ev_avg.data[ev_avg.ch_names.index('M2'), t_idx] * 1e6 + oz_val -= m2_val + if pz_val is not None: + pz_val -= m2_val + fz_val -= m2_val + ref_note = "re-referenced to M2" + else: + ref_note = "using current ref" + + entry = {'oz_amp_uv': _f(oz_val), 'pz_amp_uv': None, 'fz_amp_uv': None, + 'pz_gradient_ok': None, 'fz_inversion_ok': None} + + if pz_val is not None: + pz_ok = 0 < pz_val < oz_val + pz_str = 'OK (positive, < Oz)' if pz_ok else 'FLAG: gradient broken' + print(f"[BM12 {eye_name}] Pz @ {oz_lat_s*1000:.1f} ms: {pz_val:+.2f} µV " + f"(Oz = {oz_val:+.2f} µV) [{pz_str}, {ref_note}]") + entry['pz_amp_uv'] = _f(pz_val) + entry['pz_gradient_ok'] = bool(pz_ok) + + fz_ok = fz_val < 0 + fz_str = ('OK (inverted ⇒ V1 generator confirmed)' + if fz_ok else 'FLAG: same-sign as Oz') + print(f"[BM12 {eye_name}] Fz @ {oz_lat_s*1000:.1f} ms: {fz_val:+.2f} µV " + f"(Oz = {oz_val:+.2f} µV) [{fz_str}, {ref_note}]") + entry['fz_amp_uv'] = _f(fz_val) + entry['fz_inversion_ok'] = bool(fz_ok) + + topology_results[eye_name] = entry + +results['topology'] = topology_results + +if topology_results: + fig_bm12, ax_bm12 = plt.subplots(figsize=(8, 5)) + eyes_t = list(topology_results.keys()) + x_t = np.arange(len(eyes_t)) + w_t = 0.22 + ch_order = [('oz_amp_uv', 'Oz', 'black'), + ('pz_amp_uv', 'Pz', '#2ca02c'), + ('fz_amp_uv', 'Fz', '#ff7f0e')] + for i, (key, label, color) in enumerate(ch_order): + vals = [topology_results.get(eye, {}).get(key) or 0 for eye in eyes_t] + ax_bm12.bar(x_t + (i - 1) * w_t, vals, w_t, + color=color, alpha=0.75, label=label) + ax_bm12.axhline(0, color='black', lw=0.8) + ax_bm12.set_xticks(x_t) + ax_bm12.set_xticklabels(eyes_t) + ax_bm12.set_ylabel('Amplitude at Oz-P100 latency (µV)') + ax_bm12.set_title(f'[{ref_label}] BM12: Topology QC (M2 referenced)\n' + 'Oz > 0, Pz > 0 (gradient), Fz < 0 (Halliday inversion)') + ax_bm12.legend() + ax_bm12.grid(axis='y', alpha=0.3) + fig_bm12.tight_layout() + plt.show() # ========================================================================= # SUMMARY From dc10db595d59bbdad62c3daefc2a611c3f0f5d1a Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 4 May 2026 18:15:02 +1000 Subject: [PATCH 69/94] feat(analysis): implement robust local-maximum peak finder - Rewrote get_peak to find the absolute local maximum within the search window, removing MNE's strict requirement for positive values. - Supports waveforms with large downward baseline shifts (e.g. from Quest 2 pixel response time) without needing distortive high-pass filtering. --- eegnb/analysis/vep_utils.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/eegnb/analysis/vep_utils.py b/eegnb/analysis/vep_utils.py index 564514698..605da9625 100644 --- a/eegnb/analysis/vep_utils.py +++ b/eegnb/analysis/vep_utils.py @@ -24,23 +24,32 @@ def get_peak(erp_name, evoked_potential, peak_time_min, peak_time_max, mode): resolution to the sample interval (4 ms at 250 Hz). A parabolic fit through the peak sample and its two neighbours recovers the true peak location between samples, giving ~0.5 ms precision at 250 Hz. + + This implementation avoids MNE's strict positive/negative threshold + requirements to support waveforms with large baseline shifts. """ - # Step 1: find the sample-level peak via MNE - try: - peak_channel, sample_latency, _ = evoked_potential.get_peak( - tmin=peak_time_min, tmax=peak_time_max, - mode=mode, return_amplitude=True) - except ValueError as e: - print(f'{erp_name}: could not find peak ({e})') + # Step 1: find the sample-level peak + time_mask = (evoked_potential.times >= peak_time_min) & (evoked_potential.times <= peak_time_max) + if not np.any(time_mask): + print(f'{erp_name}: no samples in window {peak_time_min}-{peak_time_max}') return None + + data_win = evoked_potential.data[:, time_mask] + if mode == 'pos': + ch_idx, t_idx_win = np.unravel_index(np.argmax(data_win), data_win.shape) + elif mode == 'neg': + ch_idx, t_idx_win = np.unravel_index(np.argmin(data_win), data_win.shape) + else: + ch_idx, t_idx_win = np.unravel_index(np.argmax(np.abs(data_win)), data_win.shape) + + peak_channel = evoked_potential.ch_names[ch_idx] + peak_sample = np.where(time_mask)[0][t_idx_win] + sample_latency = evoked_potential.times[peak_sample] # Step 2: parabolic interpolation around the peak sample - ch_idx = evoked_potential.ch_names.index(peak_channel) times = evoked_potential.times data = evoked_potential.data[ch_idx] - peak_sample = np.argmin(np.abs(times - sample_latency)) - # Need at least one sample on each side for the fit if 0 < peak_sample < len(times) - 1: y_prev = data[peak_sample - 1] From da6c0075f089a27cd639f73362b6122a127da7b3 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 4 May 2026 21:46:03 +1000 Subject: [PATCH 70/94] build: modernize Python support and decouple streaming env from VR deps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit update notes * added support for VR/PsychXR up to 3.10. * fixed recording with Thinkpulse electrodes. build / CI: * CI matrix expanded — default Python 3.10 (was 3.8); experimental jobs on py3.11 (full env), py3.12 / py3.13 (streaming env). * dropped support for Python 3.8 and 3.9 across all conda envs and requirements. * matrix now parameterized by env_file / env_name so streaming-only builds can run without psychopy/psychxr. * typecheck job moved from py3.9 to py3.10. dependencies: * psychopy bumped to fork pellet/psychopy@v2026.2.0-rift-fix — fixes Rift stereo projection-matrix crash under strict-ndim psychxr. * psychopy-sounddevice switched from local editable install to official upstream Git tip (handles macOS arm64 sound). * psychxr — prebuilt Windows wheels from pellet/psychxr fork for cp310–cp313 (PyPI only ships 0.2.4 for ≤ py3.9). Adds experimental Quest-link VR support on py3.10–3.13. * pyobjc bumped 7.3 → ≥8.0 for newer psychopy. * pyxid2 added to streaming requirements. * pywinhook removed — obsolete once py3.9 was dropped (modern pynput on py3.10+ doesn't need it). * pyo removed from Analysis and Streaming sections (audio was never needed in those envs). * numpy py3.8 pin removed (numpy>=1.26 across the board). * setuptools<81 pinned in docsbuild reqs — brainflow imports pkg_resources at runtime, which setuptools 81 deprecated and 82 removed. * test deps (pytest, pytest-cov, nbval) moved into streaming requirements so streaming-only CI can run them. streaming env decoupling: * new eegnb/devices/vr.py with class VR — encapsulates psychxr/Rift integration (clock sync, per-trial telemetry buffering, telemetry CSV save, optical-axis offset computation) behind a generic VR-device name. Imported lazily so the streaming-only conda env (no psychxr) can still use the package. * lazy/optional imports added in eegnb/cli/utils.py, eegnb/cli/introprompt.py, eegnb/experiments/__init__.py so the package can be imported under a streaming-only env (no VR / no sound libs). * new tests/test_acquisition.py (acquisition smoke test) — what the streaming-env CI job actually runs. * new conftest.py for shared pytest setup. * eegnb/devices/eeg.py — `import pyxid2` wrapped in try/except so users without a Cedrus FTDI driver don't crash at import time. experiment runtime: * per-eye stimulus alignment now queried from the HMD runtime instead of being hard-coded to ±0.2. Quest 2/3 lenses are angled inward and offset within their own image, so a single fixed value left the checkerboard slightly off-centre and looking tilted outward. The new compute_optical_axis_offsets() asks the runtime for the actual per-lens position so the stimulus sits where each eye is naturally looking. * trial loop now runs at higher OS scheduling priority (psychopy core.rush) with Python's garbage collector paused, so the GC can't pause stimulus rendering mid-trial. * end-of-run timing summary added (frame timing stats) for spotting dropped or delayed frames after the fact. * HMD-clock to system-clock sync moved into a single VR.sync_vr_clock() call at the start of each run, so per-trial telemetry timestamps line up with EEG markers. --- .github/workflows/test.yml | 34 ++++-- conftest.py | 19 ++++ eegnb/cli/introprompt.py | 3 +- eegnb/cli/utils.py | 67 +++++++----- eegnb/devices/eeg.py | 5 +- eegnb/devices/vr.py | 148 +++++++++++++++++++++++++++ eegnb/experiments/Experiment.py | 130 ++++++++++++++++++++--- eegnb/experiments/__init__.py | 67 +++++++----- environments/eeg-expy-docsbuild.yml | 3 +- environments/eeg-expy-full.yml | 3 +- environments/eeg-expy-stimpres.yml | 3 +- environments/eeg-expy-streaming.yml | 3 +- environments/eeg-expy-streamstim.yml | 3 +- pyproject.toml | 1 + requirements.txt | 53 +++++----- tests/test_acquisition.py | 56 ++++++++++ 16 files changed, 487 insertions(+), 111 deletions(-) create mode 100644 conftest.py create mode 100644 eegnb/devices/vr.py create mode 100644 tests/test_acquisition.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5b4f3c6aa..d58f097c7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,15 +13,33 @@ jobs: defaults: run: shell: bash -el {0} + continue-on-error: ${{ matrix.experimental == true }} strategy: fail-fast: false matrix: - os: ['ubuntu-22.04', windows-latest, macOS-latest] - python_version: ['3.8'] + os: [ubuntu-22.04, windows-latest, macOS-latest] + python_version: ['3.10'] + env_file: [environments/eeg-expy-full.yml] + env_name: [eeg-expy-full] include: - # PsychoPy currently restricted to <= 3.10 + # Experimental Full Build: Catch regressions on 3.11 early - os: ubuntu-22.04 - python_version: '3.10' + python_version: '3.11' + experimental: true + env_file: environments/eeg-expy-full.yml + env_name: eeg-expy-full + + # Experimental Streaming Builds: Verify acquisition/analysis on 3.12+ + - os: ubuntu-22.04 + python_version: '3.12' + experimental: true + env_file: environments/eeg-expy-streaming.yml + env_name: eeg-expy-streaming + - os: ubuntu-22.04 + python_version: '3.13' + experimental: true + env_file: environments/eeg-expy-streaming.yml + env_name: eeg-expy-streaming steps: - uses: actions/checkout@v2 @@ -32,10 +50,10 @@ jobs: - name: Install conda uses: conda-incubator/setup-miniconda@v3 with: - environment-file: environments/eeg-expy-full.yml + environment-file: ${{ matrix.env_file || 'environments/eeg-expy-full.yml' }} auto-activate-base: false python-version: ${{ matrix.python_version }} - activate-environment: eeg-expy-full + activate-environment: ${{ matrix.env_name || 'eeg-expy-full' }} channels: conda-forge miniconda-version: "latest" @@ -58,7 +76,7 @@ jobs: Xvfb :0 -screen 0 1024x768x24 -ac +extension GLX +render -noreset &> xvfb.log & export DISPLAY=:0 fi - make test PYTEST_ARGS="--ignore=tests/test_run_experiments.py" + make test typecheck: @@ -71,7 +89,7 @@ jobs: fail-fast: false matrix: os: ['ubuntu-22.04'] - python_version: [3.9] + python_version: ['3.10'] steps: - uses: actions/checkout@v2 diff --git a/conftest.py b/conftest.py new file mode 100644 index 000000000..649b2f0ef --- /dev/null +++ b/conftest.py @@ -0,0 +1,19 @@ +import importlib.util + + +def _is_available(module_name: str) -> bool: + try: + return importlib.util.find_spec(module_name) is not None + except (ImportError, ValueError): + return False + + +collect_ignore: list[str] = [] + +if not _is_available("psychopy"): + collect_ignore += [ + "eegnb/experiments", + "eegnb/devices/vr.py", + ] +elif not _is_available("psychxr"): + collect_ignore += ["eegnb/devices/vr.py"] diff --git a/eegnb/cli/introprompt.py b/eegnb/cli/introprompt.py index ea96b3685..9e16162a0 100644 --- a/eegnb/cli/introprompt.py +++ b/eegnb/cli/introprompt.py @@ -4,7 +4,7 @@ from eegnb import generate_save_fn, DATA_DIR from eegnb.devices.eeg import EEG -from .utils import run_experiment, get_exp_desc, experiments +from .utils import run_experiment, get_exp_desc, get_experiments eegnb_sites = ['eegnb_examples', 'grifflab_dev', 'jadinlab_home'] @@ -87,6 +87,7 @@ def device_prompt() -> EEG: def exp_prompt(runorzip:str='run') -> str: + experiments = get_experiments() print("\nPlease select which experiment you would like to %s: \n" %runorzip) print( "\n".join( diff --git a/eegnb/cli/utils.py b/eegnb/cli/utils.py index fad282cf0..b7191bf29 100644 --- a/eegnb/cli/utils.py +++ b/eegnb/cli/utils.py @@ -1,38 +1,42 @@ -#change the pref libraty to PTB and set the latency mode to high precision -from psychopy import prefs -prefs.hardware['audioLib'] = 'PTB' -prefs.hardware['audioLatencyMode'] = 3 +try: + #change the pref libraty to PTB and set the latency mode to high precision + from psychopy import prefs + prefs.hardware['audioLib'] = 'PTB' + prefs.hardware['audioLatencyMode'] = 3 +except ImportError: + pass from eegnb.devices.eeg import EEG - -from eegnb.experiments import VisualN170, Experiment -from eegnb.experiments import VisualP300 -from eegnb.experiments import VisualSSVEP -from eegnb.experiments import AuditoryOddball -from eegnb.experiments.visual_cueing import cueing -from eegnb.experiments.visual_codeprose import codeprose -from eegnb.experiments.auditory_oddball import diaconescu -from eegnb.experiments.auditory_ssaep import ssaep, ssaep_onefreq from typing import Optional +def get_experiments(): + from eegnb.experiments import VisualN170, Experiment + from eegnb.experiments import VisualP300 + from eegnb.experiments import VisualSSVEP + from eegnb.experiments import AuditoryOddball + from eegnb.experiments.visual_cueing import cueing + from eegnb.experiments.visual_codeprose import codeprose + from eegnb.experiments.auditory_oddball import diaconescu + from eegnb.experiments.auditory_ssaep import ssaep, ssaep_onefreq -# New Experiment Class structure has a different initilization, to be noted -experiments = { - "visual-N170": VisualN170(), - "visual-P300": VisualP300(), - "visual-SSVEP": VisualSSVEP(), - "visual-cue": cueing, - "visual-codeprose": codeprose, - "auditory-SSAEP orig": ssaep, - "auditory-SSAEP onefreq": ssaep_onefreq, - "auditory-oddball orig": AuditoryOddball(), - "auditory-oddball diaconescu": diaconescu, -} + # New Experiment Class structure has a different initilization, to be noted + return { + "visual-N170": VisualN170, + "visual-P300": VisualP300, + "visual-SSVEP": VisualSSVEP, + "visual-cue": cueing, + "visual-codeprose": codeprose, + "auditory-SSAEP orig": ssaep, + "auditory-SSAEP onefreq": ssaep_onefreq, + "auditory-oddball orig": AuditoryOddball, + "auditory-oddball diaconescu": diaconescu, + } def get_exp_desc(exp: str): + experiments = get_experiments() if exp in experiments: module = experiments[exp] if hasattr(module, "__title__"): @@ -43,17 +47,24 @@ def get_exp_desc(exp: str): def run_experiment( experiment: str, eeg_device: EEG, record_duration: Optional[float] = None, save_fn=None ): + experiments = get_experiments() if experiment in experiments: - module = experiments[experiment] + exp_item = experiments[experiment] + + from eegnb.experiments import Experiment # Condition added for different run types of old and new experiment class structure - if isinstance(module, Experiment.BaseExperiment): + # If it's a class (BaseExperiment subclass), instantiate it + if isinstance(exp_item, type) and issubclass(exp_item, Experiment.BaseExperiment): + # Concrete subclasses supply defaults for BaseExperiment's required args; mypy can't see which subclass. + module = exp_item() # type: ignore[call-arg] module.duration = record_duration module.eeg = eeg_device module.save_fn = save_fn module.run() else: - module.present(duration=record_duration, eeg=eeg_device, save_fn=save_fn) # type: ignore + # Otherwise it's an old-style module + exp_item.present(duration=record_duration, eeg=eeg_device, save_fn=save_fn) # type: ignore else: print("\nError: Unknown experiment '{}'".format(experiment)) print("\nExperiment can be one of:") diff --git a/eegnb/devices/eeg.py b/eegnb/devices/eeg.py index ba85f2e25..e1155e3e0 100644 --- a/eegnb/devices/eeg.py +++ b/eegnb/devices/eeg.py @@ -20,7 +20,10 @@ from serial import Serial, EIGHTBITS, PARITY_NONE, STOPBITS_ONE -import pyxid2 +try: + import pyxid2 +except Exception: + pyxid2 = None from eegnb.devices.utils import ( get_openbci_usb, diff --git a/eegnb/devices/vr.py b/eegnb/devices/vr.py new file mode 100644 index 000000000..2449b2226 --- /dev/null +++ b/eegnb/devices/vr.py @@ -0,0 +1,148 @@ +import logging +import numpy as np +from time import time +from psychopy.visual.rift import Rift + +class VR(Rift): + """ + Extended VR class for HMDs, providing built-in methods for + stereoscopic rendering math, precise hardware clock synchronization, + and per-trial compositor telemetry buffering. + """ + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.libovr_to_wallclock_offset = None + + def compute_optical_axis_offsets(self): + """ + NDC x offsets placing content on each lens's optical axis: + ndc_x = (LeftTan - RightTan) / (LeftTan + RightTan). + """ + try: + import psychxr.drivers.libovr as libovr + # fov = [UpTan, DownTan, LeftTan, RightTan] + left_fov, _, _ = libovr.getEyeRenderFov(libovr.EYE_LEFT) + right_fov, _, _ = libovr.getEyeRenderFov(libovr.EYE_RIGHT) + left_L, left_R = float(left_fov[2]), float(left_fov[3]) + right_L, right_R = float(right_fov[2]), float(right_fov[3]) + return ((left_L - left_R) / (left_L + left_R), + (right_L - right_R) / (right_L + right_R)) + except Exception as e: + logging.warning(f"[VR] Failed to compute optical axis offsets: {e}") + return (0.0, 0.0) + + def sync_vr_clock(self): + """ + Calculates Wall-clock <-> LibOVR clock offset. LibOVR timestamps are on a QPC-based + clock with arbitrary zero; time.time() is Unix epoch. Sample paired calls in a + tight bracket and keep the tightest, so analysis can convert LibOVR times to wall-clock. + """ + if self.libovr_to_wallclock_offset is not None: + return self.libovr_to_wallclock_offset + + try: + from psychxr.drivers.libovr import timeInSeconds + best_bracket = None + best_offset = None + for _ in range(21): + t0 = time() + lovr = timeInSeconds() + t1 = time() + bracket = t1 - t0 + offset = 0.5 * (t0 + t1) - lovr + if best_bracket is None or bracket < best_bracket: + best_bracket = bracket + best_offset = offset + + logging.info( + f"[VR] clock offset (wall - libovr) = " + f"{best_offset:.6f}s (tightest bracket = {best_bracket*1e3:.3f}ms)" + ) + + self.libovr_to_wallclock_offset = best_offset + return best_offset + except Exception as e: + logging.warning(f"[VR] LibOVR clock sync failed: {e}") + return None + + def log_display_info(self): + """ + Reads IPD, PPD, and display resolution from the LibOVR session and logs + them to the telemetry sidecar as header comment rows. + Returns (ppd, ipd_mm) for use in stimulus sizing. + """ + try: + ppta = self.pixelsPerTanAngleAtCenter + ppd_h = np.mean([p[0] for p in ppta]) * (np.pi / 180.0) + ppd_v = np.mean([p[1] for p in ppta]) * (np.pi / 180.0) + ppd = int(round(min(ppd_h, ppd_v))) + + eye_to_nose = self.eyeToNoseDistance + ipd_mm = (eye_to_nose[0] + eye_to_nose[1]) * 1000.0 + + logging.info( + f"[VR] IPD={ipd_mm:.1f}mm ppd={ppd} (h={ppd_h:.1f} v={ppd_v:.1f}) " + f"res={self.displayResolution} eye_buf={self.size}" + ) + + if not hasattr(self, 'timing_data'): + self.timing_data = [] + self.timing_data.insert(0, ['# ipd_mm', ipd_mm, 'ppd', ppd, f'ppd_h={ppd_h:.1f} ppd_v={ppd_v:.1f}']) + + return ppd, ipd_mm + except Exception as e: + logging.warning(f"[VR] Failed to read display info: {e}") + return None, None + + def log_telemetry(self, trial_idx, software_time): + """Extracts native LibOVR performance stats and buffers them in memory.""" + submitted_frame_index = None + app_frame_index = None + app_m2p_s = None + comp_latency_s = None + time_to_vsync_s = None + + try: + submitted_frame_index = self._frameIndex - 1 + perf = getattr(self, '_perfStats', None) + if perf is not None and perf.frameStatsCount > 0: + stat = perf.frameStats[0] + app_frame_index = stat.appFrameIndex + app_m2p_s = stat.appMotionToPhotonLatency + comp_latency_s = stat.compositorLatency + time_to_vsync_s = stat.timeToVsync + except Exception: + pass + + if not hasattr(self, 'timing_data'): + self.timing_data = [] + + self.timing_data.append([ + trial_idx, software_time, + submitted_frame_index, app_frame_index, + app_m2p_s, comp_latency_s, time_to_vsync_s + ]) + + def save_telemetry(self, save_fn): + """Saves memory-buffered VR timing telemetry to a CSV sidecar.""" + timing_data = getattr(self, 'timing_data', []) + if not timing_data: + return + + import csv + timing_path = save_fn.with_name(save_fn.stem + '_timing.csv') if save_fn else 'vr_timing.csv' + with open(timing_path, 'w', newline='') as f: + writer = csv.writer(f) + writer.writerow([ + 'trial_idx', 'software_time', + 'submitted_frame_index', 'app_frame_index', + 'app_motion_to_photon_latency_s', 'compositor_latency_s', + 'time_to_vsync_s' + ]) + + # Log the clock offset if calculated + if self.libovr_to_wallclock_offset is not None: + writer.writerow(['# libovr_to_wallclock_offset_s', self.libovr_to_wallclock_offset, 'bracket_ms', 0]) + + writer.writerows(timing_data) + print(f" Saved VR timing telemetry to {timing_path}") diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index 4d7cab119..a262b94de 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -11,15 +11,16 @@ from abc import abstractmethod, ABC from typing import Callable from eegnb.devices.eeg import EEG -from psychopy import prefs -from psychopy.visual.rift import Rift +from eegnb.devices.vr import VR +from psychopy import prefs, visual, event, core +import gc from time import time import random +import json import numpy as np from pandas import DataFrame -from psychopy import visual, event from eegnb import generate_save_fn @@ -61,11 +62,14 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, self.stereoscopic = stereoscopic if use_vr: # VR interface accessible by specific experiment classes for customizing and using controllers. - self.rift: Rift = visual.Rift(monoscopic=not stereoscopic, headLocked=True) - # eye for presentation - if stereoscopic: - self.left_eye_x_pos = 0.2 - self.right_eye_x_pos = -0.2 + # VR extends psychopy's VR with clock sync, per-trial telemetry buffering, and telemetry CSV saving. + self.vr: VR = VR(monoscopic=not stereoscopic, headLocked=True) + + # Shift content onto each lens's optical axis. VR HMDs use canted + # asymmetric frustums, so NDC (0,0) is off-axis and binocular content + # there forces inward vergence ("cross-eyed" feel). + if use_vr and stereoscopic: + self.left_eye_x_pos, self.right_eye_x_pos = self.vr.compute_optical_axis_offsets() else: self.left_eye_x_pos = 0 self.right_eye_x_pos = 0 @@ -80,6 +84,7 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, self.parameter = np.random.binomial(1, 0.5, self.n_trials) self.trials = DataFrame(dict(parameter=self.parameter, timestamp=np.zeros(self.n_trials))) + @abstractmethod def load_stimulus(self): """ @@ -113,10 +118,27 @@ def present_iti(self): """ self.window.flip() + def present_soa(self, idx: int): + """ + Method called each frame during the SOA wait (stimulus-on period between trial transitions). + + The default implementation just flips the buffer, which is fine for most uses. + + Recommended for VR: override this to redraw the stimulus for trial `idx`. VR compositors + prefer a freshly drawn frame each submission; submitting only a flip leads + the compositor to treat frames as stale, which can drop to half-rate + reprojection and increase dropped/late frames. Overriding gives smoother + presentation and more accurate frame timing. + + idx : Trial index of the most recently presented stimulus — same value that was + passed to the preceding present_stimulus call. + """ + self.window.flip() + def setup(self, instructions=True): # Setting up Graphics self.window = ( - self.rift if self.use_vr + self.vr if self.use_vr else visual.Window(self.window_size, monitor="testMonitor", units="deg", screen = self.screen_num, fullscr=self.use_fullscr)) @@ -151,7 +173,8 @@ def show_instructions(self): """ # Splitting instruction text into lines - self.instruction_text = self.instruction_text % self.duration + if '%s' in self.instruction_text: + self.instruction_text = self.instruction_text % self.duration # Disabling the cursor during display of instructions self.window.mouseVisible = False @@ -215,13 +238,13 @@ def get_vr_input(self, vr_controller, button=None, trigger=False): """ trigger_squeezed = False if trigger: - for x in self.rift.getIndexTriggerValues(vr_controller): + for x in self.vr.getIndexTriggerValues(vr_controller): if x > 0.0: trigger_squeezed = True button_pressed = False if button is not None: - button_pressed, tsec = self.rift.getButtons([button], vr_controller, 'released') + button_pressed, tsec = self.vr.getButtons([button], vr_controller, 'released') if trigger_squeezed or button_pressed: return True @@ -247,6 +270,7 @@ def _draw(self, present_stimulus: Callable): tracking_state = self.window.getTrackingState() self.window.calcEyePoses(tracking_state.headPose.thePose) self.window.setDefaultView() + present_stimulus() def _clear_user_input(self): @@ -258,7 +282,7 @@ def clear_vr_input(self): Clears/resets input events from vr controllers """ if self.use_vr: - self.rift.updateInputState() + self.vr.updateInputState() def _run_trial_loop(self, start_time, duration): """ @@ -302,6 +326,10 @@ def iti_with_jitter(): # Stimulus presentation overwritten by specific experiment self._draw(lambda: self.present_stimulus(current_trial)) rendering_trial = current_trial + else: + # Keep submitting frames during SOA wait — VR compositor + # drops to half-rate if we stall between reversals. + self._draw(lambda: self.present_soa(current_trial)) else: self._draw(lambda: self.present_iti()) @@ -310,6 +338,49 @@ def iti_with_jitter(): return True + def _enable_frame_tracking(self): + """Enable per-frame interval recording for dropped frame diagnostics.""" + self.window.recordFrameIntervals = True + # Threshold for counting a frame as "dropped" — 50% over expected duration + expected_frame_dur = 1.0 / (self.window.displayRefreshRate if self.use_vr + else (self.window.getActualFrameRate() or 60)) + self.window.refreshThreshold = expected_frame_dur * 1.5 + + def _report_frame_stats(self): + """Print frame timing summary and save intervals alongside recording.""" + intervals = self.window.frameIntervals + if not intervals: + return + + intervals_ms = [i * 1000 for i in intervals] + dropped = self.window.nDroppedFrames + total = len(intervals) + mean_ms = np.mean(intervals_ms) + std_ms = np.std(intervals_ms) + max_ms = max(intervals_ms) + refresh_rate_hz = int(np.round( + self.window.displayRefreshRate if self.use_vr + else (self.window.getActualFrameRate() or 0) + )) + + print(f"\nFrame timing: {total} frames, {dropped} dropped ({dropped/total*100:.1f}%)") + print(f" Refresh rate: {refresh_rate_hz} Hz") + print(f" Mean: {mean_ms:.2f}ms Std: {std_ms:.2f}ms Max: {max_ms:.2f}ms") + + if self.save_fn: + stats_path = self.save_fn.with_name(self.save_fn.stem + '_frame_stats.json') + with open(stats_path, 'w') as f: + json.dump({ + 'display_refresh_rate_hz': refresh_rate_hz, + 'total_frames': total, + 'dropped_frames': dropped, + 'mean_ms': round(mean_ms, 3), + 'std_ms': round(std_ms, 3), + 'max_ms': round(max_ms, 3), + 'intervals_ms': [round(i, 3) for i in intervals_ms] + }, f, indent=2) + print(f" Saved to {stats_path}") + def run(self, instructions=True): """ Run the experiment """ @@ -323,11 +394,22 @@ def run(self, instructions=True): self.eeg.start(self.save_fn, duration=self.duration + 5) print("EEG Stream started") + self._enable_frame_tracking() + # Record experiment until a key is pressed or duration has expired. record_start_time = time() - # Run the trial loop - self._run_trial_loop(record_start_time, self.duration) + core.rush(True) + gc.disable() + try: + if self.use_vr: + self.vr.sync_vr_clock() + self._run_trial_loop(record_start_time, self.duration) + finally: + gc.enable() + core.rush(False) + + self._report_frame_stats() # Clearing the screen for the next trial event.clearEvents() @@ -336,20 +418,34 @@ def run(self, instructions=True): if self.eeg: self.eeg.stop() + if self.use_vr: + self.vr.save_telemetry(self.save_fn) + # Closing the window self.window.close() + def push_vr_marker(self, marker, trial_idx): + """ + Pushes the marker to EEG and delegates high-resolution LibOVR + compositor stats to the VR hardware object. + """ + software_time = time() + + if not self.eeg.push_sample(marker=marker): + return + + if self.use_vr: + self.vr.log_telemetry(trial_idx, software_time) + def send_triggers(self, marker): """Send timing triggers to recording device[s]""" for dev in self.devices: timestamp = time() dev.push_sample(marker=marker, timestamp=timestamp) - @property def name(self) -> str: """ This experiment's name """ return self.exp_name - diff --git a/eegnb/experiments/__init__.py b/eegnb/experiments/__init__.py index 8532c0f76..2c1aaff44 100644 --- a/eegnb/experiments/__init__.py +++ b/eegnb/experiments/__init__.py @@ -1,27 +1,48 @@ -from .visual_n170.n170 import VisualN170 -from .visual_p300.p300 import VisualP300 -from .visual_ssvep.ssvep import VisualSSVEP +try: + from .visual_n170.n170 import VisualN170 + from .visual_p300.p300 import VisualP300 + from .visual_ssvep.ssvep import VisualSSVEP +except ImportError: + VisualN170 = None # type: ignore + VisualP300 = None # type: ignore + VisualSSVEP = None # type: ignore -from psychopy import sound, plugins, prefs -import platform +try: + from psychopy import sound, plugins, prefs + import platform + import logging -# PTB does not yet support macOS Apple Silicon freely, need to fall back to sounddevice. -if platform.system() == 'Darwin' and platform.machine() == 'arm64': - # import psychopy_sounddevice.backend_sounddevice - plugins.scanPlugins() - success = plugins.loadPlugin('psychopy-sounddevice') - print(f"psychopy_sounddevice plugin loaded: {success}") + # PTB does not yet support macOS Apple Silicon freely, need to fall back to sounddevice. + if platform.system() == 'Darwin' and platform.machine() == 'arm64': + # import psychopy_sounddevice.backend_sounddevice + plugins.scanPlugins() + success = plugins.loadPlugin('psychopy-sounddevice') + print(f"psychopy_sounddevice plugin loaded: {success}") - # Force reload sound module - import importlib - importlib.reload(sound) - # setting prefs.hardware['audio_device'] still falls back to a default device, need to use setDevice. - audio_device = prefs.hardware.get('audioDevice', 'default') - if audio_device and audio_device != 'default': - sound.setDevice(audio_device) -else: - #change the pref library to PTB and set the latency mode to high precision - prefs.hardware['audioLib'] = 'PTB' - prefs.hardware['audioLatencyMode'] = 3 + # Force reload sound module + import importlib + importlib.reload(sound) + + # Try to set the audio device if requested and available + audio_device = prefs.hardware.get('audioDevice', 'default') + if audio_device and audio_device != 'default': + if hasattr(sound, 'setDevice'): + try: + sound.setDevice(audio_device) + except Exception as e: + logging.warning(f"Failed to set audio device to '{audio_device}': {e}") + else: + logging.warning(f"sound.setDevice not available, could not set device to '{audio_device}'") + else: + #change the pref library to PTB and set the latency mode to high precision + prefs.hardware['audioLib'] = 'PTB' + prefs.hardware['audioLatencyMode'] = 3 +except ImportError: + import logging + # logging.warning("PsychoPy not found. Stimulus presentation experiments will not be available.") + pass -from .auditory_oddball.aob import AuditoryOddball \ No newline at end of file +try: + from .auditory_oddball.aob import AuditoryOddball +except ImportError: + AuditoryOddball = None # type: ignore diff --git a/environments/eeg-expy-docsbuild.yml b/environments/eeg-expy-docsbuild.yml index 31eae3a6e..3bcbdbca0 100644 --- a/environments/eeg-expy-docsbuild.yml +++ b/environments/eeg-expy-docsbuild.yml @@ -3,7 +3,8 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.8,<=3.13 + - python >=3.10 # higher versions allowed for experimental builds + - setuptools - pytables # install pytables for macOS arm64, so do not need to build from source. - rust # used by docsbuild - pip diff --git a/environments/eeg-expy-full.yml b/environments/eeg-expy-full.yml index d3c160f01..2e096c6dc 100644 --- a/environments/eeg-expy-full.yml +++ b/environments/eeg-expy-full.yml @@ -3,7 +3,8 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.8,<=3.10 # psychopy <= 3.10 + - python>=3.10,<=3.11 # psychopy 2026.x requires py3.10; higher versions for experimental builds + - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - numpy # fix PsychXR numpy dependency DLL issues on Windows - pytables # install pytables for macOS arm64, so do not need to build from source. diff --git a/environments/eeg-expy-stimpres.yml b/environments/eeg-expy-stimpres.yml index de7ed1178..dd6e36096 100644 --- a/environments/eeg-expy-stimpres.yml +++ b/environments/eeg-expy-stimpres.yml @@ -3,7 +3,8 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.8,<=3.10 # psychopy <= 3.10 + - python >=3.10 # psychopy 2026.x requires py3.10; higher versions allowed for experimental builds + - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - wxpython>=4.0 # install wxpython to prevent error on macOS arm64: "site-packages/wx/_core.cpython-38-darwin.so, 0x0002): symbol not found in flat namespace '__ZN10wxBoxSizer20InformFirstDirectionEiii'" - cffi # Fix sound ffi.callback() issue with sounddevice on macOS: https://github.com/spatialaudio/python-sounddevice/issues/397 diff --git a/environments/eeg-expy-streaming.yml b/environments/eeg-expy-streaming.yml index 2b7f87af7..800ab4cc6 100644 --- a/environments/eeg-expy-streaming.yml +++ b/environments/eeg-expy-streaming.yml @@ -3,7 +3,8 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.8,<=3.13 + - python >=3.10 # higher versions allowed for experimental builds + - setuptools - liblsl # install liblsl to prevent error on macOS and Ubuntu: "RuntimeError: LSL binary library file was not found." - pip - pip: diff --git a/environments/eeg-expy-streamstim.yml b/environments/eeg-expy-streamstim.yml index 8ed52571f..4942ff41b 100644 --- a/environments/eeg-expy-streamstim.yml +++ b/environments/eeg-expy-streamstim.yml @@ -3,7 +3,8 @@ channels: - defaults dependencies: # System-level dependencies - - python>=3.8,<=3.10 # psychopy <= 3.10 + - python>=3.10,<=3.13 # psychopy <= 3.10; higher versions for experimental builds + - setuptools - dukpy==0.2.3 # psychopy dependency, avoid failing due to building wheel on win 3.9. - liblsl # install liblsl to prevent error on macOS and Ubuntu: "RuntimeError: LSL binary library file was not found." - wxpython>=4.0 # install wxpython to prevent error on macOS arm64: "site-packages/wx/_core.cpython-38-darwin.so, 0x0002): symbol not found in flat namespace '__ZN10wxBoxSizer20InformFirstDirectionEiii'" diff --git a/pyproject.toml b/pyproject.toml index de7bf0dc5..e9fb602e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,7 @@ addopts = """ --current-env --ignore-glob 'examples/**.py' --ignore-glob '**/baseline_task.py' + --ignore 'tests/test_run_experiments.py' """ testpaths = [ "eegnb", diff --git a/requirements.txt b/requirements.txt index 001b69229..b12034bda 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,8 +3,7 @@ scikit-learn>=0.23.2 pandas>=1.1.4 -numpy>=1.26.0; python_version >= "3.9" -numpy<=1.24.4; python_version == "3.8" +numpy>=1.26.0 mne>=0.20.8 seaborn>=0.11.0 pyriemann>=0.2.7 @@ -15,10 +14,7 @@ pysocks>=1.7.1 pyserial>=3.5 h5py>=3.1.0 pytest-shutil -pyo>=1.0.3; platform_system == "Linux" -#pynput requires pyobjc, psychopy requires a version less than 8, setting pyobjc to -# a specific version prevents an endless dependency resolution loop. -pyobjc==7.3; sys_platform == 'darwin' +pyobjc>=8.0; sys_platform == 'darwin' airium>=0.1.0 attrdict>=2.0.1 attrdict3 @@ -26,6 +22,7 @@ attrdict3 ## ~~ Streaming Requirements ~~ +pyxid2 muselsl>=2.0.2 # Upgrade from 1.10.5 to 1.16.2 so the arm64 lib is available to macOS Apple Silicon for preventing error: # pylsl/liblsl64.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')) @@ -35,10 +32,7 @@ pysocks>=1.7.1 pyserial>=3.5 h5py>=3.1.0 pytest-shutil -pyo>=1.0.3; platform_system == "Linux" -#pynput requires pyobjc, psychopy requires a version less than 8, setting pyobjc to -# a specific version prevents an endless dependency resolution loop. -pyobjc==7.3; sys_platform == 'darwin' +pyobjc>=8.0; sys_platform == 'darwin' #Removed keyboard dependency due segmentation fault on Apple Silicon: https://github.com/boppreh/keyboard/issues/507 pynput airium>=0.1.0 @@ -46,22 +40,25 @@ attrdict>=2.0.1 attrdict3 click +# Tests +pytest +pytest-cov +nbval + ## ~~ Stimpres Requirements ~~ -#pynput requires pyobjc, psychopy requires a version less than 8, setting pyobjc to -# a specific version prevents an endless dependency resolution loop. -pyobjc==7.3; sys_platform == 'darwin' +pyobjc>=8.0; sys_platform == 'darwin' #upgrade psychopy to use newer wxpython dependency which is prebuilt for m1 support. -psychopy==2025.1.1 -#needed for macos arm sound support: https://github.com/psychopy/psychopy-sounddevice/pull/4 --e psychopy-sounddevice +# Forked with a fix for Rift stereo projection matrix crash under strict-ndim psychxr. +psychopy @ git+https://github.com/pellet/psychopy.git@v2026.2.0-rift-fix +#needed for macos arm sound support +psychopy-sounddevice @ git+https://github.com/psychopy/psychopy-sounddevice.git ffpyplayer==4.5.2 # 4.5.3 fails to build as wheel. psychtoolbox scikit-learn>=0.23.2 pandas>=1.1.4 -numpy>=1.26.0; python_version >= "3.9" -numpy==1.24.4; python_version == "3.8" +numpy>=1.26.0 mne>=0.20.8 seaborn>=0.11.0 pysocks>=1.7.1 @@ -73,23 +70,23 @@ airium>=0.1.0 attrdict>=2.0.1 attrdict3 -# pywinhook needs some special treatment since there are only wheels on PyPI for Python 3.7-3.8, and building requires special tools (swig, VS C++ tools) -# See issue: https://github.com/NeuroTechX/eeg-notebooks/issues/29 -pywinhook>=1.6.0 ; platform_system == "Windows" and (python_version == "3.7" or python_version == "3.8") -pywinhook @ https://github.com/ActivityWatch/wheels/raw/master/pywinhook/pyWinhook-1.6.2-cp39-cp39-win_amd64.whl ; platform_system == "Windows" and python_version == "3.9" - # pyglet downgrade to prevent threadmode warning on windows # See issue: https://github.com/psychopy/psychopy/issues/2876 pyglet==1.4.11 ; platform_system == "Windows" -# Oculus/Quest VR support - currently only supported on Windows and -# <= 3.9, otherwise will need Oculus PC SDK to build wheel. -psychxr>=0.2.4rc2; platform_system == "Windows" and python_version <= "3.9" - +# Quest-link VR support - prebuilt Windows wheels from the fork's GitHub +# release (0.2.6rc1 adds Python 3.10 support). +# psychxr/quest-link is Windows-only. +psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp310-cp310-win_amd64.whl ; platform_system == "Windows" and python_version == "3.10" +# PsychoPy/PsychXR does not yet officially support Python > 3.10; the wheels below are experimental. +psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp311-cp311-win_amd64.whl ; platform_system == "Windows" and python_version == "3.11" +psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp312-cp312-win_amd64.whl ; platform_system == "Windows" and python_version == "3.12" +psychxr @ https://github.com/pellet/psychxr/releases/download/v0.2.6rc1/psychxr-0.2.6rc1-cp313-cp313-win_amd64.whl ; platform_system == "Windows" and python_version == "3.13" -## ~~ Docsbuild Requirements ~~ +## ~~ Docsbuild Requirements ~~ +setuptools<81 # brainflow imports pkg_resources at runtime; setuptools 81 deprecated it and 82 removed it recommonmark brainflow numpydoc diff --git a/tests/test_acquisition.py b/tests/test_acquisition.py new file mode 100644 index 000000000..5626f6ac0 --- /dev/null +++ b/tests/test_acquisition.py @@ -0,0 +1,56 @@ +import os +import time +import pandas as pd +import pytest +from eegnb.devices.eeg import EEG + +def test_synthetic_acquisition(tmp_path): + """ + Test the data acquisition pipeline using a synthetic BrainFlow board. + This verifies that we can initialize a device, start a stream, + record data, and save it to a CSV file in a CI-friendly way. + """ + # Use a temporary file for recording + save_fn = tmp_path / "synthetic_data.csv" + + # Initialize EEG with synthetic board + # BrainFlow synthetic board (ID -1) works without hardware + eeg = EEG(device='synthetic') + + # Verify metadata initialization + assert eeg.backend == 'brainflow' + assert eeg.sfreq == 250 # Default for synthetic board + assert len(eeg.channels) > 0 + + # Start stream and capture data + # We specify a short duration for the test + record_duration = 2 + eeg.start(str(save_fn), duration=record_duration + 5) + + # Simulate some experiment time + time.sleep(record_duration) + + # Push a few synthetic markers + eeg.push_sample(marker=1, timestamp=time.time()) + time.sleep(0.1) + eeg.push_sample(marker=2, timestamp=time.time()) + + # Stop recording and release session + eeg.stop() + + # Verify file creation and content + assert save_fn.exists() + + # Read the data back + data = pd.read_csv(save_fn) + + # Basic data validation + assert len(data) > 0 + assert 'timestamps' in data.columns + assert 'stim' in data.columns + + # Check if markers were recorded (may vary slightly based on timing) + # but we should at least see non-zero values in the stim column + assert (data['stim'] != 0).any() + + print(f"Acquired {len(data)} samples with columns: {list(data.columns)}") From effdcbab268f5a912dc7296a0948508f415d6172 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 4 May 2026 23:11:26 +1000 Subject: [PATCH 71/94] cleanup/fixes --- .github/workflows/docs.yml | 2 +- eegnb/experiments/Experiment.py | 72 ++------------------------------- requirements.txt | 2 +- 3 files changed, 6 insertions(+), 70 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 5f8953695..1fd1e9e5d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -18,7 +18,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: 3.8 + python-version: '3.10' - name: Install dependencies run: | diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index a262b94de..177a89db5 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -65,9 +65,9 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, # VR extends psychopy's VR with clock sync, per-trial telemetry buffering, and telemetry CSV saving. self.vr: VR = VR(monoscopic=not stereoscopic, headLocked=True) - # Shift content onto each lens's optical axis. VR HMDs use canted - # asymmetric frustums, so NDC (0,0) is off-axis and binocular content - # there forces inward vergence ("cross-eyed" feel). + # Shift the display so it aligns perfectly with the center of each eye. + # VR headsets have angled screens, so if we draw everything strictly at + # the center of the display (0,0), it makes the user feel cross-eyed. if use_vr and stereoscopic: self.left_eye_x_pos, self.right_eye_x_pos = self.vr.compute_optical_axis_offsets() else: @@ -84,7 +84,6 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, self.parameter = np.random.binomial(1, 0.5, self.n_trials) self.trials = DataFrame(dict(parameter=self.parameter, timestamp=np.zeros(self.n_trials))) - @abstractmethod def load_stimulus(self): """ @@ -122,8 +121,6 @@ def present_soa(self, idx: int): """ Method called each frame during the SOA wait (stimulus-on period between trial transitions). - The default implementation just flips the buffer, which is fine for most uses. - Recommended for VR: override this to redraw the stimulus for trial `idx`. VR compositors prefer a freshly drawn frame each submission; submitting only a flip leads the compositor to treat frames as stale, which can drop to half-rate @@ -270,7 +267,6 @@ def _draw(self, present_stimulus: Callable): tracking_state = self.window.getTrackingState() self.window.calcEyePoses(tracking_state.headPose.thePose) self.window.setDefaultView() - present_stimulus() def _clear_user_input(self): @@ -338,48 +334,7 @@ def iti_with_jitter(): return True - def _enable_frame_tracking(self): - """Enable per-frame interval recording for dropped frame diagnostics.""" - self.window.recordFrameIntervals = True - # Threshold for counting a frame as "dropped" — 50% over expected duration - expected_frame_dur = 1.0 / (self.window.displayRefreshRate if self.use_vr - else (self.window.getActualFrameRate() or 60)) - self.window.refreshThreshold = expected_frame_dur * 1.5 - - def _report_frame_stats(self): - """Print frame timing summary and save intervals alongside recording.""" - intervals = self.window.frameIntervals - if not intervals: - return - - intervals_ms = [i * 1000 for i in intervals] - dropped = self.window.nDroppedFrames - total = len(intervals) - mean_ms = np.mean(intervals_ms) - std_ms = np.std(intervals_ms) - max_ms = max(intervals_ms) - refresh_rate_hz = int(np.round( - self.window.displayRefreshRate if self.use_vr - else (self.window.getActualFrameRate() or 0) - )) - - print(f"\nFrame timing: {total} frames, {dropped} dropped ({dropped/total*100:.1f}%)") - print(f" Refresh rate: {refresh_rate_hz} Hz") - print(f" Mean: {mean_ms:.2f}ms Std: {std_ms:.2f}ms Max: {max_ms:.2f}ms") - - if self.save_fn: - stats_path = self.save_fn.with_name(self.save_fn.stem + '_frame_stats.json') - with open(stats_path, 'w') as f: - json.dump({ - 'display_refresh_rate_hz': refresh_rate_hz, - 'total_frames': total, - 'dropped_frames': dropped, - 'mean_ms': round(mean_ms, 3), - 'std_ms': round(std_ms, 3), - 'max_ms': round(max_ms, 3), - 'intervals_ms': [round(i, 3) for i in intervals_ms] - }, f, indent=2) - print(f" Saved to {stats_path}") + def run(self, instructions=True): """ Run the experiment """ @@ -394,8 +349,6 @@ def run(self, instructions=True): self.eeg.start(self.save_fn, duration=self.duration + 5) print("EEG Stream started") - self._enable_frame_tracking() - # Record experiment until a key is pressed or duration has expired. record_start_time = time() @@ -409,8 +362,6 @@ def run(self, instructions=True): gc.enable() core.rush(False) - self._report_frame_stats() - # Clearing the screen for the next trial event.clearEvents() @@ -424,21 +375,6 @@ def run(self, instructions=True): # Closing the window self.window.close() - - - def push_vr_marker(self, marker, trial_idx): - """ - Pushes the marker to EEG and delegates high-resolution LibOVR - compositor stats to the VR hardware object. - """ - software_time = time() - - if not self.eeg.push_sample(marker=marker): - return - - if self.use_vr: - self.vr.log_telemetry(trial_idx, software_time) - def send_triggers(self, marker): """Send timing triggers to recording device[s]""" for dev in self.devices: diff --git a/requirements.txt b/requirements.txt index b12034bda..38d0e98f3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -65,7 +65,7 @@ pysocks>=1.7.1 pyserial>=3.5 h5py>=3.1.0 pytest-shutil -pyo>=1.0.3; platform_system == "Linux" + airium>=0.1.0 attrdict>=2.0.1 attrdict3 From c4cd4002d47a356ec1fa582f178aab4a99d8449b Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Tue, 5 May 2026 18:32:30 +1000 Subject: [PATCH 72/94] last improvements --- eegnb/cli/utils.py | 10 +++++----- eegnb/devices/vr.py | 8 ++++++-- eegnb/experiments/__init__.py | 16 ++++++++++++---- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/eegnb/cli/utils.py b/eegnb/cli/utils.py index b7191bf29..057335c41 100644 --- a/eegnb/cli/utils.py +++ b/eegnb/cli/utils.py @@ -57,11 +57,11 @@ def run_experiment( # If it's a class (BaseExperiment subclass), instantiate it if isinstance(exp_item, type) and issubclass(exp_item, Experiment.BaseExperiment): # Concrete subclasses supply defaults for BaseExperiment's required args; mypy can't see which subclass. - module = exp_item() # type: ignore[call-arg] - module.duration = record_duration - module.eeg = eeg_device - module.save_fn = save_fn - module.run() + exp_instance = exp_item() # type: ignore[call-arg] + exp_instance.duration = record_duration + exp_instance.eeg = eeg_device + exp_instance.save_fn = save_fn + exp_instance.run() else: # Otherwise it's an old-style module exp_item.present(duration=record_duration, eeg=eeg_device, save_fn=save_fn) # type: ignore diff --git a/eegnb/devices/vr.py b/eegnb/devices/vr.py index 2449b2226..2b833ac9e 100644 --- a/eegnb/devices/vr.py +++ b/eegnb/devices/vr.py @@ -15,8 +15,12 @@ def __init__(self, *args, **kwargs): def compute_optical_axis_offsets(self): """ - NDC x offsets placing content on each lens's optical axis: - ndc_x = (LeftTan - RightTan) / (LeftTan + RightTan). + Computes the Normalized Device Coordinates (NDC) horizontal (x) offset + needed to center content directly in front of each eye's physical lens. + + Because VR headsets use asymmetric lenses (the screen extends further + to the outside of the eye than the inside), the mathematical center of + the screen (NDC 0,0) does not align with the user's optical axis. """ try: import psychxr.drivers.libovr as libovr diff --git a/eegnb/experiments/__init__.py b/eegnb/experiments/__init__.py index 2c1aaff44..b60df7432 100644 --- a/eegnb/experiments/__init__.py +++ b/eegnb/experiments/__init__.py @@ -1,11 +1,19 @@ +class MissingExperiment: + def __init__(self, *args, **kwargs): + raise RuntimeError( + "PsychoPy is not installed. Stimulus presentation experiments " + "are not available in this environment. Please install the " + "'stimpres' or 'full' dependencies to use this feature." + ) + try: from .visual_n170.n170 import VisualN170 from .visual_p300.p300 import VisualP300 from .visual_ssvep.ssvep import VisualSSVEP except ImportError: - VisualN170 = None # type: ignore - VisualP300 = None # type: ignore - VisualSSVEP = None # type: ignore + VisualN170 = MissingExperiment # type: ignore + VisualP300 = MissingExperiment # type: ignore + VisualSSVEP = MissingExperiment # type: ignore try: from psychopy import sound, plugins, prefs @@ -45,4 +53,4 @@ try: from .auditory_oddball.aob import AuditoryOddball except ImportError: - AuditoryOddball = None # type: ignore + AuditoryOddball = MissingExperiment # type: ignore From 40d31843c40f1eb23a7807f34b116cda3bb1c560 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Wed, 6 May 2026 19:23:10 +1000 Subject: [PATCH 73/94] added build fixes which were missed in merge --- .github/actions/setup-conda-env/action.yml | 32 ++++++++++++++++++ .github/workflows/docs.yml | 39 ++++++++-------------- .github/workflows/test.yml | 28 +++++----------- 3 files changed, 53 insertions(+), 46 deletions(-) create mode 100644 .github/actions/setup-conda-env/action.yml diff --git a/.github/actions/setup-conda-env/action.yml b/.github/actions/setup-conda-env/action.yml new file mode 100644 index 000000000..4867fd1b0 --- /dev/null +++ b/.github/actions/setup-conda-env/action.yml @@ -0,0 +1,32 @@ +name: Set up conda env +description: > + Install Miniconda and create/activate an EEG-ExPy conda environment from + the given env yml. Shared by the Test and Typecheck jobs so the two + don't drift apart. Environment name is not set in the yml files so local + installs can use any name they like. + +inputs: + environment-file: + required: true + description: Path to the conda environment yml file to install from. + activate-environment: + required: true + description: Name to give the created environment. + python-version: + required: false + description: > + Python version to pin (e.g. '3.8'). Overrides the version conda would + otherwise resolve from the environment file's constraints. When omitted, + conda resolves freely within the environment file's range. + +runs: + using: composite + steps: + - uses: conda-incubator/setup-miniconda@v3 + with: + environment-file: ${{ inputs.environment-file }} + activate-environment: ${{ inputs.activate-environment }} + python-version: ${{ inputs.python-version }} + auto-activate-base: false + channels: conda-forge + miniconda-version: "latest" diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 1fd1e9e5d..090a8b1f8 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -9,29 +9,20 @@ on: jobs: build: runs-on: ubuntu-22.04 + defaults: + run: + shell: bash -el {0} steps: - name: Checkout repo uses: actions/checkout@v3 with: - fetch-depth: 0 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - - name: Install dependencies - run: | - make install-deps-apt - python -m pip install --upgrade pip wheel - python -m pip install attrdict - - make install-deps-wxpython - - - name: Build project - run: | - make install-docs-build-dependencies + fetch-depth: 0 + - name: Set up conda env + uses: ./.github/actions/setup-conda-env + with: + environment-file: environments/eeg-expy-docsbuild.yml + activate-environment: eeg-expy-docsbuild - name: Get list of changed files id: changes @@ -40,7 +31,6 @@ jobs: git diff --name-only origin/master...HEAD > changed_files.txt cat changed_files.txt - - name: Determine build mode id: mode run: | @@ -48,13 +38,13 @@ jobs: echo "FULL_BUILD=true" >> $GITHUB_ENV echo "Detected non-example file change. Full build triggered." else - CHANGED_EXAMPLES=$(grep '^examples/.*\.py$' changed_files.txt | paste -sd '|' -) + # || true prevents grep's exit code 1 (no matches) from aborting the step + CHANGED_EXAMPLES=$(grep '^examples/.*\.py$' changed_files.txt | paste -sd '|' - || true) echo "FULL_BUILD=false" >> $GITHUB_ENV echo "CHANGED_EXAMPLES=$CHANGED_EXAMPLES" >> $GITHUB_ENV echo "Changed examples: $CHANGED_EXAMPLES" fi - - name: Cache built documentation id: cache-docs uses: actions/cache@v4 @@ -65,15 +55,12 @@ jobs: restore-keys: | ${{ runner.os }}-sphinx- - - name: Build docs - run: | - make docs + run: make docs - - name: Deploy Docs uses: peaceiris/actions-gh-pages@v3 - if: github.ref == 'refs/heads/master' # TODO: Deploy seperate develop-version of docs? + if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/dev/') with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: doc/_build/html diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d58f097c7..6afc1f6ee 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -47,22 +47,13 @@ jobs: if: "startsWith(runner.os, 'Linux')" run: | make install-deps-apt - - name: Install conda - uses: conda-incubator/setup-miniconda@v3 + - name: Set up conda env + uses: ./.github/actions/setup-conda-env with: - environment-file: ${{ matrix.env_file || 'environments/eeg-expy-full.yml' }} - auto-activate-base: false + environment-file: ${{ matrix.env_file }} + activate-environment: ${{ matrix.env_name }} python-version: ${{ matrix.python_version }} - activate-environment: ${{ matrix.env_name || 'eeg-expy-full' }} - channels: conda-forge - miniconda-version: "latest" - - - name: Fix PsychXR numpy dependency DLL issues (Windows only) - if: matrix.os == 'windows-latest' - run: | - conda install --force-reinstall numpy - - - name: Run eegnb install test + - name: Run eeg-expy install test run: | if [ "$RUNNER_OS" == "Linux" ]; then Xvfb :0 -screen 0 1024x768x24 -ac +extension GLX +render -noreset &> xvfb.log & @@ -93,15 +84,12 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Install conda - uses: conda-incubator/setup-miniconda@v3 + - name: Set up conda env + uses: ./.github/actions/setup-conda-env with: environment-file: environments/eeg-expy-full.yml - auto-activate-base: false - python-version: ${{ matrix.python_version }} activate-environment: eeg-expy-full - channels: conda-forge - miniconda-version: "latest" + python-version: ${{ matrix.python_version }} - name: Typecheck run: | make typecheck From f421175519a26f877b0feecbbd8ffdc029ee70d1 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 7 May 2026 19:22:58 +1000 Subject: [PATCH 74/94] photodiode stuff wip --- .../visual_vep/pattern_reversal_vep.py | 37 ++++++++++++++++++- .../00x__pattern_reversal_run_experiment.py | 20 ++++------ 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index 4adfa2d46..0dfcc1e09 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -84,6 +84,12 @@ def __init__(self, eeg: Optional[EEG] = None, save_fn=None, [lbl for lbl in self.block_labels for _ in range(block_trial_size)] ) + # Photodiode trigger: number of frames a white flash is rendered into + # the occluded-eye buffer on each reversal. Set to N at every reversal + # in present_stimulus(), counts down in draw_frame(). + self._flash_frames_remaining = 0 + self._flash_frames_per_reversal = 3 + # ------------------------------------------------------------------ # Stimulus creation helpers # ------------------------------------------------------------------ @@ -134,6 +140,16 @@ def load_stimulus(self) -> Dict[str, Any]: width=self.window.size[0], height=self.window.size[1], fillColor='black', ) + # Photodiode target: small white square in the bottom-outer corner of + # the occluded-eye buffer. Position is set per-frame in draw_frame() + # so the flash sits on the ear-side of whichever eye is occluded. + self._flash_size_px = 200 + self.white_flash = visual.Rect( + self.window, + width=self._flash_size_px, height=self._flash_size_px, + fillColor='white', + units='pix', + ) def make_checker_stim(intensity_checks, check_deg, pos): return visual.ImageStim( @@ -218,7 +234,7 @@ def present_block_instructions(self, current_block: int) -> None: # Check if the eye just switched so we can prompt them to move the patch is_first_block_for_eye = (current_block == 0) or (self.block_eye_and_size(current_block - 1)[0] != open_eye) - patch_prompt = f"*** MOVE PATCH TO {closed_eye.upper()} EYE NOW ***\n" if is_first_block_for_eye else "" + patch_prompt = f"*** MOVE PHOTODIODE TO {closed_eye.upper()} LENS NOW ***\n" if is_first_block_for_eye else "" if self.use_vr: # Re-assert height each call — VR state changes (calcEyePoses / @@ -280,6 +296,8 @@ def present_stimulus(self, idx: int): EVENTS[f"block/{c['eye']}/{c['size_name']}"], self.current_block_index * self.block_trial_size, ) + # Arm the photodiode flash for this reversal; draw_frame() decrements. + self._flash_frames_remaining = self._flash_frames_per_reversal self.draw_frame(idx) self.push_marker(idx) @@ -296,7 +314,22 @@ def draw_frame(self, idx: int): self.stim[eye]['checkerboards'][size_idx][phase].draw() self.stim[eye]['fixation'].draw() self.window.setBuffer(closed_eye) - self.black_background.draw() + if self._flash_frames_remaining > 0: + self.black_background.draw() + # Bottom of the buffer, slightly off-centre on the ear side. + # Quest 2 lenses clip the buffer corners aggressively, so + # `bottom-edge corner` is invisible; sit the flash 25% in from + # the edge along x and 25% up from the bottom along y. + bw, bh = self.window.size[0], self.window.size[1] + sign = -1 if closed_eye == 'left' else +1 + self.white_flash.pos = ( + sign * (bw * 0.25), + -bh * 0.25, + ) + self.white_flash.draw() + self._flash_frames_remaining -= 1 + else: + self.black_background.draw() else: self.grey_background.draw() self.stim['monoscopic']['checkerboards'][size_idx][phase].draw() diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index 5b4b3ae35..76acf886f 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -10,14 +10,10 @@ ``reps_per_condition`` reps = 8 blocks, shuffled at startup. Marker codes: - 1 — reversal, left-eye block - 2 — reversal, right-eye block - - Block-start codes (bit 0 = eye, bit 1 = size class): - 100 — block_start, left eye, large check (~60 arcmin / 1 deg) - 101 — block_start, right eye, large check - 102 — block_start, left eye, small check (~30 arcmin / 0.5 deg) - 103 — block_start, right eye, small check + 1 — block_start, left eye, large check (~60 arcmin / 1 deg) + 2 — block_start, right eye, large check + 3 — block_start, left eye, small check (~30 arcmin / 0.5 deg) + 4 — block_start, right eye, small check """ ################################################################################################### @@ -53,17 +49,17 @@ serial_port = "COM3" # Config: CYTON_CONFIG_GAIN_4X needed for Thinkpulse active electrodes, otherwise leave as None. -config = None +config = CYTON_CONFIG_GAIN_4X # Electrode montage type: "cap" or "mark-iv" -montage_type = "cap" +montage_type = "mark-iv" # Ground A2, Ref Fz. -ch_names = ["M1", "Pz", "P7", "P8", "O1", "O2", "Oz", "M2"] +ch_names = ["A1", "A2", "PO7", "PO8", "Oz", "Oz", "O1", "O2"] # Subject and session identifiers subject_id = 0 -session_nb = 16 +session_nb = 17 ################################################################################################### # Initiate EEG device From 9a5f3eadcf8bfc4edcb69a2ad53e34b004b408bc Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 7 May 2026 19:41:50 +1000 Subject: [PATCH 75/94] make present_soa opt-in --- eegnb/experiments/Experiment.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index 177a89db5..598732800 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -130,7 +130,7 @@ def present_soa(self, idx: int): idx : Trial index of the most recently presented stimulus — same value that was passed to the preceding present_stimulus call. """ - self.window.flip() + raise NotImplementedError def setup(self, instructions=True): # Setting up Graphics @@ -299,6 +299,7 @@ def iti_with_jitter(): current_trial = trial_end_time = -1 trial_start_time = None rendering_trial = -1 + has_soa_override = type(self).present_soa is not BaseExperiment.present_soa # Clear/reset user input buffer self._clear_user_input() @@ -322,9 +323,9 @@ def iti_with_jitter(): # Stimulus presentation overwritten by specific experiment self._draw(lambda: self.present_stimulus(current_trial)) rendering_trial = current_trial - else: + elif has_soa_override: # Keep submitting frames during SOA wait — VR compositor - # drops to half-rate if we stall between reversals. + # drops to lower framerate if we stall between reversals. self._draw(lambda: self.present_soa(current_trial)) else: self._draw(lambda: self.present_iti()) From ae654f9440dde64ad3c7e62d5c37bdaa0b909456 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 7 May 2026 20:13:31 +1000 Subject: [PATCH 76/94] removed unneeded code and fix crash in non vr mode. --- eegnb/experiments/Experiment.py | 4 +-- eegnb/experiments/diagnostics.py | 48 -------------------------------- 2 files changed, 2 insertions(+), 50 deletions(-) diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index fc92eee50..de44d84db 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -149,11 +149,11 @@ def setup(self, instructions=True): self.display_check = self.vr.validate_frame_rate(self._draw_blank_frame) else: self.window = visual.Window(self.window_size, - monitor=diagnostics.build_flat_monitor(self.screen_num), + monitor="testMonitor", units="deg", screen=self.screen_num, fullscr=self.use_fullscr) - actual_hz = self.window.getActualFrameRate(nFrames=20) + actual_hz = self.window.getActualFrameRate() self.display_check = { 'target_hz': round(actual_hz, 1) if actual_hz else None, 'actual_hz': round(actual_hz, 1) if actual_hz else None, diff --git a/eegnb/experiments/diagnostics.py b/eegnb/experiments/diagnostics.py index 4c81b126a..a56044ef7 100644 --- a/eegnb/experiments/diagnostics.py +++ b/eegnb/experiments/diagnostics.py @@ -16,54 +16,6 @@ import numpy as np -# --------------------------------------------------------------------------- -# Monitor (flat display) -# --------------------------------------------------------------------------- - -def build_flat_monitor(screen_num=0): - """Create a PsychoPy ``Monitor`` from detected screen properties. - - Avoids the 'Monitor specification not found' warning that PsychoPy emits - when a flat ``visual.Window`` can't locate a saved calibration file. - - Note: there is no equivalent ``measure_frame_rate`` for monitors — flat - displays deliver their nominal rate reliably (no encoded transport - pipeline), and PsychoPy's ``Window.getActualFrameRate`` already provides - the measurement when needed. Frame-rate validation lives on the ``VR`` - class because it's only informative where target Hz is decoupled from - actual delivery (Quest Link). - """ - import logging - from psychopy import monitors - from psychopy import logging as psy_logging - - # Temporarily elevate console logger to ERROR to suppress the - # "Monitor specification not found" warning during initialization. - if hasattr(psy_logging, 'console') and psy_logging.console: - old_level = psy_logging.console.level - psy_logging.console.setLevel(logging.ERROR) - else: - old_level = None - - try: - mon = monitors.Monitor('eegnb_auto', autoLog=False) - finally: - if old_level is not None: - psy_logging.console.setLevel(old_level) - - mon.setDistance(60) - try: - import pyglet - screen = pyglet.canvas.Display().get_screens()[screen_num] - mon.setSizePix([screen.width, screen.height]) - except Exception: - mon.setSizePix([1920, 1080]) - - # Persist the monitor specification so PsychoPy finds it on disk next time - mon.save() - return mon - - # --------------------------------------------------------------------------- # Pre-experiment signal quality check # From b60c35414eef2df4e22da636d6ddd71926c8ae30 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 7 May 2026 21:32:00 +1000 Subject: [PATCH 77/94] initializing properly --- eegnb/devices/vr.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/eegnb/devices/vr.py b/eegnb/devices/vr.py index 2b833ac9e..c71e6dc8b 100644 --- a/eegnb/devices/vr.py +++ b/eegnb/devices/vr.py @@ -12,6 +12,7 @@ class VR(Rift): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.libovr_to_wallclock_offset = None + self.timing_data = [] def compute_optical_axis_offsets(self): """ @@ -89,8 +90,6 @@ def log_display_info(self): f"res={self.displayResolution} eye_buf={self.size}" ) - if not hasattr(self, 'timing_data'): - self.timing_data = [] self.timing_data.insert(0, ['# ipd_mm', ipd_mm, 'ppd', ppd, f'ppd_h={ppd_h:.1f} ppd_v={ppd_v:.1f}']) return ppd, ipd_mm @@ -117,9 +116,6 @@ def log_telemetry(self, trial_idx, software_time): time_to_vsync_s = stat.timeToVsync except Exception: pass - - if not hasattr(self, 'timing_data'): - self.timing_data = [] self.timing_data.append([ trial_idx, software_time, From a606f13dbf8956c8877f154846f4061178684d48 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 7 May 2026 21:48:12 +1000 Subject: [PATCH 78/94] cleanup --- eegnb/devices/vr.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/eegnb/devices/vr.py b/eegnb/devices/vr.py index c71e6dc8b..1020428a5 100644 --- a/eegnb/devices/vr.py +++ b/eegnb/devices/vr.py @@ -1,4 +1,5 @@ import logging +import csv import numpy as np from time import time from psychopy.visual.rift import Rift @@ -12,6 +13,7 @@ class VR(Rift): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.libovr_to_wallclock_offset = None + self.libovr_to_wallclock_bracket = None self.timing_data = [] def compute_optical_axis_offsets(self): @@ -65,6 +67,7 @@ def sync_vr_clock(self): ) self.libovr_to_wallclock_offset = best_offset + self.libovr_to_wallclock_bracket = best_bracket return best_offset except Exception as e: logging.warning(f"[VR] LibOVR clock sync failed: {e}") @@ -125,11 +128,9 @@ def log_telemetry(self, trial_idx, software_time): def save_telemetry(self, save_fn): """Saves memory-buffered VR timing telemetry to a CSV sidecar.""" - timing_data = getattr(self, 'timing_data', []) - if not timing_data: + if not self.timing_data: return - import csv timing_path = save_fn.with_name(save_fn.stem + '_timing.csv') if save_fn else 'vr_timing.csv' with open(timing_path, 'w', newline='') as f: writer = csv.writer(f) @@ -142,7 +143,7 @@ def save_telemetry(self, save_fn): # Log the clock offset if calculated if self.libovr_to_wallclock_offset is not None: - writer.writerow(['# libovr_to_wallclock_offset_s', self.libovr_to_wallclock_offset, 'bracket_ms', 0]) + writer.writerow(['# libovr_to_wallclock_offset_s', self.libovr_to_wallclock_offset, 'bracket_ms', self.libovr_to_wallclock_bracket * 1000]) - writer.writerows(timing_data) + writer.writerows(self.timing_data) print(f" Saved VR timing telemetry to {timing_path}") From 51175014f06bdb69858c5e623bfd7208f2d851ff Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 7 May 2026 22:07:53 +1000 Subject: [PATCH 79/94] removed unneeded comments --- eegnb/experiments/Experiment.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index 598732800..01427b871 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -62,12 +62,9 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, self.stereoscopic = stereoscopic if use_vr: # VR interface accessible by specific experiment classes for customizing and using controllers. - # VR extends psychopy's VR with clock sync, per-trial telemetry buffering, and telemetry CSV saving. self.vr: VR = VR(monoscopic=not stereoscopic, headLocked=True) - # Shift the display so it aligns perfectly with the center of each eye. - # VR headsets have angled screens, so if we draw everything strictly at - # the center of the display (0,0), it makes the user feel cross-eyed. + # Shift the display so it aligns perfectly with the center of each eye. if use_vr and stereoscopic: self.left_eye_x_pos, self.right_eye_x_pos = self.vr.compute_optical_axis_offsets() else: @@ -335,8 +332,6 @@ def iti_with_jitter(): return True - - def run(self, instructions=True): """ Run the experiment """ From 0527425daf57fc7d91a8676919d84beb144873f8 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 7 May 2026 22:12:05 +1000 Subject: [PATCH 80/94] only write if save_fn is not none --- eegnb/devices/vr.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/eegnb/devices/vr.py b/eegnb/devices/vr.py index 1020428a5..424dafa1b 100644 --- a/eegnb/devices/vr.py +++ b/eegnb/devices/vr.py @@ -127,11 +127,12 @@ def log_telemetry(self, trial_idx, software_time): ]) def save_telemetry(self, save_fn): - """Saves memory-buffered VR timing telemetry to a CSV sidecar.""" - if not self.timing_data: + """Saves memory-buffered VR timing telemetry to a CSV sidecar. + """ + if save_fn is None: return - - timing_path = save_fn.with_name(save_fn.stem + '_timing.csv') if save_fn else 'vr_timing.csv' + + timing_path = save_fn.with_name(save_fn.stem + '_timing.csv') with open(timing_path, 'w', newline='') as f: writer = csv.writer(f) writer.writerow([ @@ -140,10 +141,9 @@ def save_telemetry(self, save_fn): 'app_motion_to_photon_latency_s', 'compositor_latency_s', 'time_to_vsync_s' ]) - - # Log the clock offset if calculated + if self.libovr_to_wallclock_offset is not None: - writer.writerow(['# libovr_to_wallclock_offset_s', self.libovr_to_wallclock_offset, 'bracket_ms', self.libovr_to_wallclock_bracket * 1000]) - + writer.writerow(['# libovr_to_wallclock_offset_s', self.libovr_to_wallclock_offset, 'bracket_ms', self.libovr_to_wallclock_bracket * 1000]) + writer.writerows(self.timing_data) print(f" Saved VR timing telemetry to {timing_path}") From 77e119a7ead515fa984b8f2663644d38935ea044 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Fri, 8 May 2026 20:02:09 +1000 Subject: [PATCH 81/94] reverted docs deployment change --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 090a8b1f8..15afd487b 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -60,7 +60,7 @@ jobs: - name: Deploy Docs uses: peaceiris/actions-gh-pages@v3 - if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/dev/') + if: github.ref == 'refs/heads/master' # TODO: Deploy seperate develop-version of docs? with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: doc/_build/html From e1ad9753cc8ae68c3aa11fb675c1d9956dc953b9 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Fri, 8 May 2026 21:07:38 +1000 Subject: [PATCH 82/94] improved errors for missing optional depencies. --- eegnb/devices/eeg.py | 9 ++++-- eegnb/experiments/__init__.py | 22 +++++++------- eegnb/utils/__init__.py | 0 eegnb/utils/missing.py | 56 +++++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 13 deletions(-) create mode 100644 eegnb/utils/__init__.py create mode 100644 eegnb/utils/missing.py diff --git a/eegnb/devices/eeg.py b/eegnb/devices/eeg.py index e1155e3e0..5f90a8aed 100644 --- a/eegnb/devices/eeg.py +++ b/eegnb/devices/eeg.py @@ -22,8 +22,13 @@ try: import pyxid2 -except Exception: - pyxid2 = None +except ImportError: + from eegnb.utils.missing import missing_module + pyxid2 = missing_module( + "pyxid2", + "The Cedrus XID backend (NIRSport2 and other Cedrus stimulus-marker devices)", + "xid", + ) from eegnb.devices.utils import ( get_openbci_usb, diff --git a/eegnb/experiments/__init__.py b/eegnb/experiments/__init__.py index b60df7432..8a20d32c3 100644 --- a/eegnb/experiments/__init__.py +++ b/eegnb/experiments/__init__.py @@ -1,19 +1,19 @@ -class MissingExperiment: - def __init__(self, *args, **kwargs): - raise RuntimeError( - "PsychoPy is not installed. Stimulus presentation experiments " - "are not available in this environment. Please install the " - "'stimpres' or 'full' dependencies to use this feature." - ) +from eegnb.utils.missing import missing_class + +MissingExperiment = missing_class( + "PsychoPy", + "Stimulus presentation experiments", + "stimpres", +) try: from .visual_n170.n170 import VisualN170 from .visual_p300.p300 import VisualP300 from .visual_ssvep.ssvep import VisualSSVEP except ImportError: - VisualN170 = MissingExperiment # type: ignore - VisualP300 = MissingExperiment # type: ignore - VisualSSVEP = MissingExperiment # type: ignore + VisualN170 = MissingExperiment + VisualP300 = MissingExperiment + VisualSSVEP = MissingExperiment try: from psychopy import sound, plugins, prefs @@ -53,4 +53,4 @@ def __init__(self, *args, **kwargs): try: from .auditory_oddball.aob import AuditoryOddball except ImportError: - AuditoryOddball = MissingExperiment # type: ignore + AuditoryOddball = MissingExperiment diff --git a/eegnb/utils/__init__.py b/eegnb/utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/eegnb/utils/missing.py b/eegnb/utils/missing.py new file mode 100644 index 000000000..dc03a5a67 --- /dev/null +++ b/eegnb/utils/missing.py @@ -0,0 +1,56 @@ +"""Sentinel objects for optional dependencies. + +Lets the package import cleanly even when an optional library isn't installed, +while still raising a clear, actionable error if a user tries to use a feature +that depends on it. + +Two flavours: + missing_class(...) — for symbols the user *instantiates* (e.g. an + Experiment subclass). Raises on construction. + missing_module(...) — for symbols the user *accesses attributes on* + (e.g. ``pyxid2.get_xid_devices()``). Raises on + any attribute access. +""" + + +from typing import Any + + +def _format_message(name: str, feature: str, extras: str) -> str: + return ( + f"{name} is not installed. {feature} is not available in this " + f"environment. Please install the '{extras}' or 'full' dependencies " + "to use this feature." + ) + + +def missing_class(name: str, feature: str, extras: str) -> Any: + """Sentinel mimicking a class; raises RuntimeError on instantiation. + + Returns ``Any`` so the sentinel can be assigned to a name that would + normally hold a specific class (e.g. ``VisualN170 = missing_class(...)``) + without type-checker complaints at the call site. + """ + message = _format_message(name, feature, extras) + + class _Missing: + def __init__(self, *args, **kwargs): + raise RuntimeError(message) + + return _Missing + + +def missing_module(name: str, feature: str, extras: str) -> Any: + """Sentinel mimicking a module; raises RuntimeError on attribute access. + + Returns ``Any`` so the sentinel can be assigned to a name that would + normally hold a real module (e.g. ``pyxid2 = missing_module(...)``) + without type-checker complaints at the call site. + """ + message = _format_message(name, feature, extras) + + class _Missing: + def __getattr__(self, attr): + raise RuntimeError(message) + + return _Missing() From 880b2f5c7d287ce9568c66752ad03d65c9ee097a Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Fri, 8 May 2026 21:16:59 +1000 Subject: [PATCH 83/94] catch missing shared library error. --- eegnb/devices/eeg.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/eegnb/devices/eeg.py b/eegnb/devices/eeg.py index 5f90a8aed..e4258ca88 100644 --- a/eegnb/devices/eeg.py +++ b/eegnb/devices/eeg.py @@ -22,7 +22,10 @@ try: import pyxid2 -except ImportError: +except (ImportError, OSError): + # OSError covers pyxid2 being installed but its native FTDI dependency + # (libftd2xx.so / ftd2xx.dll) being absent — common on Linux CI where + # the proprietary FTDI driver isn't installed. from eegnb.utils.missing import missing_module pyxid2 = missing_module( "pyxid2", From f7751c5017447279d3e56123a95a057fa374189b Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Fri, 8 May 2026 21:27:51 +1000 Subject: [PATCH 84/94] fixed import placement and typecheck error --- eegnb/devices/eeg.py | 6 ++---- eegnb/experiments/__init__.py | 26 ++++++++++++++++++-------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/eegnb/devices/eeg.py b/eegnb/devices/eeg.py index e4258ca88..6c017ed21 100644 --- a/eegnb/devices/eeg.py +++ b/eegnb/devices/eeg.py @@ -20,13 +20,11 @@ from serial import Serial, EIGHTBITS, PARITY_NONE, STOPBITS_ONE +from eegnb.utils.missing import missing_module + try: import pyxid2 except (ImportError, OSError): - # OSError covers pyxid2 being installed but its native FTDI dependency - # (libftd2xx.so / ftd2xx.dll) being absent — common on Linux CI where - # the proprietary FTDI driver isn't installed. - from eegnb.utils.missing import missing_module pyxid2 = missing_module( "pyxid2", "The Cedrus XID backend (NIRSport2 and other Cedrus stimulus-marker devices)", diff --git a/eegnb/experiments/__init__.py b/eegnb/experiments/__init__.py index 8a20d32c3..2cd3097d6 100644 --- a/eegnb/experiments/__init__.py +++ b/eegnb/experiments/__init__.py @@ -1,3 +1,5 @@ +from typing import TYPE_CHECKING + from eegnb.utils.missing import missing_class MissingExperiment = missing_class( @@ -6,14 +8,19 @@ "stimpres", ) -try: +if TYPE_CHECKING: from .visual_n170.n170 import VisualN170 from .visual_p300.p300 import VisualP300 from .visual_ssvep.ssvep import VisualSSVEP -except ImportError: - VisualN170 = MissingExperiment - VisualP300 = MissingExperiment - VisualSSVEP = MissingExperiment +else: + try: + from .visual_n170.n170 import VisualN170 + from .visual_p300.p300 import VisualP300 + from .visual_ssvep.ssvep import VisualSSVEP + except ImportError: + VisualN170 = MissingExperiment + VisualP300 = MissingExperiment + VisualSSVEP = MissingExperiment try: from psychopy import sound, plugins, prefs @@ -50,7 +57,10 @@ # logging.warning("PsychoPy not found. Stimulus presentation experiments will not be available.") pass -try: +if TYPE_CHECKING: from .auditory_oddball.aob import AuditoryOddball -except ImportError: - AuditoryOddball = MissingExperiment +else: + try: + from .auditory_oddball.aob import AuditoryOddball + except ImportError: + AuditoryOddball = MissingExperiment From 40d1ffef517cdfddfaabd6be3682263399e1a3fd Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sat, 9 May 2026 09:46:27 +1000 Subject: [PATCH 85/94] vr telemetry/push marker clean up --- eegnb/experiments/Experiment.py | 51 ++++++++++++++++++--------- eegnb/experiments/rest/eoec.py | 14 ++------ eegnb/experiments/visual_n170/n170.py | 20 ++--------- 3 files changed, 39 insertions(+), 46 deletions(-) diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index bd0d0c391..76b8dd020 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -15,6 +15,7 @@ from psychopy import prefs, visual, event, core import gc +import logging from time import time import random import json @@ -25,11 +26,13 @@ from eegnb import generate_save_fn from eegnb.experiments import diagnostics +logger = logging.getLogger(__name__) + class BaseExperiment(ABC): def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, soa: float, jitter: float, - use_vr=False, use_fullscr = True, screen_num=0, stereoscopic = False, devices = list): + use_vr=False, use_fullscr = True, screen_num=0, stereoscopic = False, devices=None): """ Initializer for the Base Experiment Class Args: @@ -52,7 +55,7 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, Press spacebar to continue. \n""".format(self.exp_name) self.duration = duration self.eeg: EEG = eeg - self.devices = devices + self.devices = devices if devices is not None else [] self.save_fn = save_fn self.n_trials = n_trials self.iti = iti @@ -79,6 +82,14 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, self.signal_check = None self.display_check = None + # Marker observers: callables (trial_idx, timestamp) invoked on every + # push_marker(). Used by integrations that want timing context but + # don't emit a hardware/software marker themselves (e.g. VR compositor + # telemetry, eyetracker fixation logs, photodiode metadata sidecars). + # Hardware/software *emitters* (Cyton, XID, kernelflow, etc.) live in + # self.devices and are dispatched via push_sample, not this list. + self.marker_listeners: list = [] + # Initializing the marker names self.markernames = [1, 2] @@ -144,6 +155,8 @@ def setup(self, instructions=True): if self.use_vr: self.window = self.vr self.display_check = self.vr.validate_frame_rate(self._draw_blank_frame) + # Capture per-marker compositor stats alongside each EEG trigger. + self.marker_listeners.append(self.vr.log_telemetry) else: self.window = visual.Window(self.window_size, monitor="testMonitor", @@ -536,24 +549,28 @@ def run(self, instructions=True): - def push_vr_marker(self, marker, trial_idx): - """ - Pushes the marker to EEG and delegates high-resolution LibOVR - compositor stats to the VR hardware object. - """ - software_time = time() - - if not self.eeg.push_sample(marker=marker): - return - - if self.use_vr: - self.vr.log_telemetry(trial_idx, software_time) + def push_marker(self, marker, trial_idx): + """Push a trigger to the primary EEG and every additional device in + self.devices, then notify any registered marker_listeners with + (trial_idx, timestamp). - def send_triggers(self, marker): - """Send timing triggers to recording device[s]""" + Emitters (self.eeg, self.devices) record the marker value into their + respective streams — Cyton's marker channel, XID's TTL output, + muselsl's lsl marker stream, etc. + Listeners (self.marker_listeners) receive only the timing context — + they're observers that capture additional state at marker time + (VR compositor telemetry, eyetracker fixation, photodiode metadata). + """ + timestamp = time() + if self.eeg: + self.eeg.push_sample(marker=marker, timestamp=timestamp) for dev in self.devices: - timestamp = time() dev.push_sample(marker=marker, timestamp=timestamp) + for listener in self.marker_listeners: + try: + listener(trial_idx, timestamp) + except Exception: + logger.exception("marker listener failed: %s", listener) @property def name(self) -> str: diff --git a/eegnb/experiments/rest/eoec.py b/eegnb/experiments/rest/eoec.py index b95d196e1..6087459a7 100644 --- a/eegnb/experiments/rest/eoec.py +++ b/eegnb/experiments/rest/eoec.py @@ -113,17 +113,9 @@ def present_stimulus(self, idx: int): timestamp = time() self.trials.at[idx, "timestamp"] = timestamp self.outlet.push_sample([self.markernames[label]], timestamp) - - if self.eeg: - if self.eeg.backend == "muselsl": - marker = [self.markernames[label]] - else: - marker = self.markernames[label] - self.eeg.push_sample(marker=marker, timestamp=timestamp) - - if self.devices: - marker = self.markernames[label] - self.send_triggers(marker) + + if self.eeg or self.devices: + self.push_marker(self.markernames[label], idx) if self.serial: try: diff --git a/eegnb/experiments/visual_n170/n170.py b/eegnb/experiments/visual_n170/n170.py index 29a8a013d..723e8d251 100644 --- a/eegnb/experiments/visual_n170/n170.py +++ b/eegnb/experiments/visual_n170/n170.py @@ -36,7 +36,6 @@ def load_stimulus(self): return [self.houses, self.faces] def present_stimulus(self, idx: int): - # Get the label of the trial label = self.trials["parameter"].iloc[idx] # Get the image to be presented @@ -44,23 +43,8 @@ def present_stimulus(self, idx: int): # Draw the image self._current_image.draw() - - # Pushing the sample to the EEG - if self.eeg: - timestamp = time() - - if self.eeg.backend == "muselsl": - marker = [self.markernames[label]] - else: - marker = self.markernames[label] - - self.eeg.push_sample(marker=marker, timestamp=timestamp) - - - if self.devices: - marker = self.markernames[label] - self.send_triggers(marker) - + if self.eeg or self.devices: + self.push_marker(self.markernames[label], idx) self.window.flip() From cf109efe1aec48e6c211fede05a4998b444931b2 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Mon, 11 May 2026 22:15:47 +1000 Subject: [PATCH 86/94] Refactor VEP analysis and visualization - Added eegnb/utils/display.py with standard refresh rate utilities - Deleted examples/visual_vep/01r__pattern_reversal_viz.py as visualization is moving to notebooks - Updated core experiment classes and vep_utils.py to refine pattern reversal VEP --- doc/getting_started/loading_and_saving.md | 162 +- eegnb/analysis/vep_utils.py | 186 +- eegnb/devices/eeg.py | 26 + eegnb/experiments/Experiment.py | 42 + .../visual_vep/pattern_reversal_vep.py | 88 +- eegnb/utils/display.py | 30 + .../00x__pattern_reversal_run_experiment.py | 50 +- .../visual_vep/01r__pattern_reversal_viz.py | 2010 ----------------- 8 files changed, 428 insertions(+), 2166 deletions(-) create mode 100644 eegnb/utils/display.py delete mode 100644 examples/visual_vep/01r__pattern_reversal_viz.py diff --git a/doc/getting_started/loading_and_saving.md b/doc/getting_started/loading_and_saving.md index a71aa6928..db033312e 100644 --- a/doc/getting_started/loading_and_saving.md +++ b/doc/getting_started/loading_and_saving.md @@ -1,82 +1,82 @@ -# Loading and Saving Data -Knowing where the data is saved is integral to the functionality of EEG Notebooks. EEG Notebooks saves data to a default location in a hidden directory. From this directory, the individual files can be found based on a folder structure outlined below in the **naming convention.** - -## Locating the Default Data Directory - -#### Windows 10 -The default directory is found at the location `C:\Users\*USER_NAME*\.eegnb` an example of which is pictured below. -![fig](../img/windows_default_directory.PNG) - -#### Linux - -#### MacOS - -## Changing the Default Data Directory -The default directory for saving data is automatically set within the library. If you want to save and analyze data to/from a new directory, it must be passed as a parameter to both the `eegnb.generate_save_fn()` and `eegnb.analysis.load_data()` functions. - -**Saving to new directory:** -``` python -from eegnb import generate_save_fn -from eegnb.experiments.visual_n170 import n170 - -# Define session parameters -board = 'cyton' -experiment = 'visual-N170 -subject = 1 -session = 1 - -# Define new directory and generate save filename -new_dir = 'C:/Users/Jadin/Documents/EEG_Notebooks_Data' -save_fn = generate_save_fn(board, experiment, subject, session, new_dir) - -# Continue to run experiment as normal... -``` - -**Loading from new directory:** -``` python -from eegnb.analysis.utils import load_data - -# Define parameters for session you want to load -board = 'cyton' -experiment = 'visual-N170 -subject = 1 -session = 1 - -# Define new directory -new_dir = 'C:/Users/Jadin/Documents/EEG_Notebooks_Data' - -# Load data -raw = load_data( - subject_id = subject, - session_nb = session, - device_name = board, - experiment = experiment, - data_dir = new_dir - ) -``` - -## Naming Convention -From the specified data directory, EEG notebooks then follows a specific set of naming conventions to define subdirectories and save the data. The full path ends up taking the form -``` -DATA_DIR\experiment\site\device\subject#\session#\file_name.csv -``` -Each field is explained below: - -**Experiment:** This part is the name of the experiment being run. Example names of experiments as they appear in the example datasets are shown below. -``` -visual-N170 -visual-P300 -visual-SSVEP -``` - -**Site:** The site refers to the recording location, or generally the machine it was recorded to. If you are saving and analyzing only your own data on your local machine, you do not need to specify your site name as it will default to 'local'. When loading example datasets however, it is necessary to specify from which site you would like to load data. - -**Device:** The name of the device being recorded from. - -**Subject #:** When entering subject ID as a parameter, you only need to specify the integer value. The integer will be formatted to `subjectXXXX` where "XXXX" is a four-digit representation of the integer ID#. - -**Session #:** A session in this case would be the full period of time which you have the device on and are taking multiple recordings. For example: if you put the headset on and take five recordings, all five of these recording would belong to session number 1. Once you take a break from consecutive recordings, then this would constitute a new session. Just like the subject ID, this value is passed as an integer and gets converted to a read-able format. - -**File name:** The file name is automatically generated in the format `recording_date_time.csv` - +# Loading and Saving Data +Knowing where the data is saved is integral to the functionality of EEG Notebooks. EEG Notebooks saves data to a default location in a hidden directory. From this directory, the individual files can be found based on a folder structure outlined below in the **naming convention.** + +## Locating the Default Data Directory + +#### Windows 10 +The default directory is found at the location `C:\Users\*USER_NAME*\.eegnb` an example of which is pictured below. +![fig](../img/windows_default_directory.PNG) + +#### Linux + +#### MacOS + +## Changing the Default Data Directory +The default directory for saving data is automatically set within the library. If you want to save and analyze data to/from a new directory, it must be passed as a parameter to both the `eegnb.generate_save_fn()` and `eegnb.analysis.load_data()` functions. + +**Saving to new directory:** +``` python +from eegnb import generate_save_fn +from eegnb.experiments.visual_n170 import n170 + +# Define session parameters +board = 'cyton' +experiment = 'visual-N170 +subject = 1 +session = 1 + +# Define new directory and generate save filename +new_dir = 'C:/Users/Jadin/Documents/EEG_Notebooks_Data' +save_fn = generate_save_fn(board, experiment, subject, session, new_dir) + +# Continue to run experiment as normal... +``` + +**Loading from new directory:** +``` python +from eegnb.analysis.utils import load_data + +# Define parameters for session you want to load +board = 'cyton' +experiment = 'visual-N170 +subject = 1 +session = 1 + +# Define new directory +new_dir = 'C:/Users/Jadin/Documents/EEG_Notebooks_Data' + +# Load data +raw = load_data( + subject_id = subject, + session_nb = session, + device_name = board, + experiment = experiment, + data_dir = new_dir + ) +``` + +## Naming Convention +From the specified data directory, EEG notebooks then follows a specific set of naming conventions to define subdirectories and save the data. The full path ends up taking the form +``` +DATA_DIR\experiment\site\device\subject#\session#\file_name.csv +``` +Each field is explained below: + +**Experiment:** This part is the name of the experiment being run. Example names of experiments as they appear in the example datasets are shown below. +``` +visual-N170 +visual-P300 +visual-SSVEP +``` + +**Site:** The site refers to the recording location, or generally the machine it was recorded to. If you are saving and analyzing only your own data on your local machine, you do not need to specify your site name as it will default to 'local'. When loading example datasets however, it is necessary to specify from which site you would like to load data. + +**Device:** The name of the device being recorded from. + +**Subject #:** When entering subject ID as a parameter, you only need to specify the integer value. The integer will be formatted to `subjectXXXX` where "XXXX" is a four-digit representation of the integer ID#. + +**Session #:** A session in this case would be the full period of time which you have the device on and are taking multiple recordings. For example: if you put the headset on and take five recordings, all five of these recording would belong to session number 1. Once you take a break from consecutive recordings, then this would constitute a new session. Just like the subject ID, this value is passed as an integer and gets converted to a read-able format. + +**File name:** The file name is automatically generated in the format `recording_date_time.csv` + ### Examples \ No newline at end of file diff --git a/eegnb/analysis/vep_utils.py b/eegnb/analysis/vep_utils.py index 605da9625..264f6dc80 100644 --- a/eegnb/analysis/vep_utils.py +++ b/eegnb/analysis/vep_utils.py @@ -10,6 +10,13 @@ IOLD_FLAG_MS = 8.0 # |L − R P100 latency| above this flags suspected unilateral demyelination LOG2_AMP_FLAG = 1.0 # |log2(L/R P100 amplitude)| above this flags inter-ocular drive imbalance +# Minimum amplitude-to-pre-stim-noise ratio for a peak to be reported. Below +# this, the "peak" returned by argmax in the search window is dominated by +# noise rather than a real waveform feature, and its latency is unreliable. +# Particularly relevant for small-check / demyelinated-pathway conditions +# where P100 amplitude can drop below the per-channel noise floor. +PEAK_MIN_SNR = 2.0 + def print_latency(peak_name, peak_latency, peak_channel, uv): peak_latency = round(peak_latency * 1e3, 2) # convert to milliseconds @@ -17,23 +24,31 @@ def print_latency(peak_name, peak_latency, peak_channel, uv): print('{} Peak of {} µV at {} ms in peak_channel {}'.format(peak_name, uv, peak_latency, peak_channel)) -def get_peak(erp_name, evoked_potential, peak_time_min, peak_time_max, mode): +def get_peak(erp_name, evoked_potential, peak_time_min, peak_time_max, mode, + min_snr=PEAK_MIN_SNR): """Find peak latency with sub-sample precision using parabolic interpolation. MNE's get_peak returns the sample with the largest value, limiting resolution to the sample interval (4 ms at 250 Hz). A parabolic fit through the peak sample and its two neighbours recovers the true peak location between samples, giving ~0.5 ms precision at 250 Hz. - - This implementation avoids MNE's strict positive/negative threshold + + This implementation avoids MNE's strict positive/negative threshold requirements to support waveforms with large baseline shifts. + + Pre-stim baseline std is computed per channel and the peak amplitude is + only reported when |amp| / noise_std >= ``min_snr``. Below that, the + "peak" returned by argmax in the search window is dominated by noise + rather than a real waveform feature; returning ``None`` lets callers + skip downstream analysis instead of chasing a spurious latency. + Set ``min_snr=None`` to disable the gate (returns the peak unconditionally). """ # Step 1: find the sample-level peak time_mask = (evoked_potential.times >= peak_time_min) & (evoked_potential.times <= peak_time_max) if not np.any(time_mask): print(f'{erp_name}: no samples in window {peak_time_min}-{peak_time_max}') return None - + data_win = evoked_potential.data[:, time_mask] if mode == 'pos': ch_idx, t_idx_win = np.unravel_index(np.argmax(data_win), data_win.shape) @@ -41,7 +56,7 @@ def get_peak(erp_name, evoked_potential, peak_time_min, peak_time_max, mode): ch_idx, t_idx_win = np.unravel_index(np.argmin(data_win), data_win.shape) else: ch_idx, t_idx_win = np.unravel_index(np.argmax(np.abs(data_win)), data_win.shape) - + peak_channel = evoked_potential.ch_names[ch_idx] peak_sample = np.where(time_mask)[0][t_idx_win] sample_latency = evoked_potential.times[peak_sample] @@ -70,21 +85,77 @@ def get_peak(erp_name, evoked_potential, peak_time_min, peak_time_max, mode): interp_latency = sample_latency interp_uv = data[peak_sample] + # Step 3: SNR check — pre-stim baseline std as the noise reference + pre_mask = evoked_potential.times < 0 + if pre_mask.any(): + noise_uv = float(evoked_potential.data[ch_idx, pre_mask].std()) + else: + noise_uv = 0.0 + snr = abs(interp_uv) / max(noise_uv, 1e-12) + + if min_snr is not None and snr < min_snr: + print(f'{erp_name}: SNR={snr:.2f} < {min_snr} ' + f'(amp={interp_uv*1e6:.2f}µV, noise={noise_uv*1e6:.2f}µV) — peak unreliable') + return None + return { 'name': erp_name, 'latency': interp_latency, 'channel': peak_channel, - 'amplitude': interp_uv + 'amplitude': interp_uv, + 'noise_uv': noise_uv, + 'snr': snr, } -def get_pr_vep_latencies(evoked_occipital: Evoked): - n75 = get_peak(erp_name='N75', evoked_potential=evoked_occipital, - peak_time_min=0.060, peak_time_max=0.090, mode='neg') +def get_pr_vep_latencies(evoked_occipital: Evoked, min_snr=PEAK_MIN_SNR): + """Detect canonical PR-VEP peaks with SNR gating. + + P100 is measured **peak-to-trough** against the preceding N75. Clinical + PR-VEP convention: P100 amplitude = P100_peak − N75_trough. This cancels + any DC pedestal (slow drift, reference offset, residual baseline bias) + that would otherwise suppress the apparent P100 absolute amplitude. + The peak-to-trough value is used for SNR gating, so a P100 sitting + on top of a deep N75 is correctly recognised as a strong response + even when its absolute µV value looks small. + + Each peak is gated by ``min_snr`` (default ``PEAK_MIN_SNR`` = 2.0). A peak + whose amplitude (peak-to-trough where applicable) doesn't exceed the + per-channel pre-stim noise floor by that factor is returned as ``None`` + rather than reported as a spurious latency. Particularly important for + small-check / demyelinated conditions where P100 absolute amplitude can + drop below the noise floor. + + Pass ``min_snr=None`` to disable gating and report whichever sample is + largest in each search window (legacy behaviour). + """ + # N75 and N145 are gated by absolute amplitude (no obvious anchor for + # peak-to-trough; their clinical role is mostly as landmarks anyway). + n75 = get_peak(erp_name='N75', evoked_potential=evoked_occipital, + peak_time_min=0.060, peak_time_max=0.090, mode='neg', + min_snr=min_snr) + # P100 is detected raw first (no SNR gate) so we can compute the proper + # peak-to-trough metric before deciding whether to keep it. p100 = get_peak(erp_name='P100', evoked_potential=evoked_occipital, - peak_time_min=0.080, peak_time_max=0.130, mode='pos') - n145 = get_peak(erp_name='N145', evoked_potential=evoked_occipital, - peak_time_min=0.120, peak_time_max=0.170, mode='neg') + peak_time_min=0.080, peak_time_max=0.130, mode='pos', + min_snr=None) + if p100 is not None: + if n75 is not None: + peak_to_trough = p100['amplitude'] - n75['amplitude'] + else: + # Fall back to absolute amplitude if N75 wasn't detectable. + peak_to_trough = p100['amplitude'] + ptt_snr = abs(peak_to_trough) / max(p100['noise_uv'], 1e-12) + p100['peak_to_trough'] = peak_to_trough + p100['peak_to_trough_snr'] = ptt_snr + if min_snr is not None and ptt_snr < min_snr: + print(f'P100: peak-to-trough SNR={ptt_snr:.2f} < {min_snr} ' + f'(ptt={peak_to_trough*1e6:.2f}µV, noise={p100["noise_uv"]*1e6:.2f}µV) ' + '— peak unreliable') + p100 = None + n145 = get_peak(erp_name='N145', evoked_potential=evoked_occipital, + peak_time_min=0.120, peak_time_max=0.170, mode='neg', + min_snr=min_snr) return n75, p100, n145 @@ -140,11 +211,19 @@ def compute_iold(p100_left, p100_right, flag_threshold_ms=IOLD_FLAG_MS): p100_left_ms = p100_left['latency'] * 1000.0 p100_right_ms = p100_right['latency'] * 1000.0 iold_ms = p100_left_ms - p100_right_ms + # Prefer peak-to-trough amplitude when available (cancels DC pedestal / + # baseline drift); fall back to absolute peak value if not. + amp_l = p100_left.get('peak_to_trough', p100_left['amplitude']) + amp_r = p100_right.get('peak_to_trough', p100_right['amplitude']) return { 'p100_left_ms': json_safe_float(p100_left_ms), 'p100_right_ms': json_safe_float(p100_right_ms), - 'p100_left_uv': json_safe_float(p100_left['amplitude'] * 1e6), - 'p100_right_uv': json_safe_float(p100_right['amplitude'] * 1e6), + 'p100_left_uv': json_safe_float(amp_l * 1e6), + 'p100_right_uv': json_safe_float(amp_r * 1e6), + 'p100_left_snr': json_safe_float(p100_left.get('peak_to_trough_snr', + p100_left.get('snr'))), + 'p100_right_snr': json_safe_float(p100_right.get('peak_to_trough_snr', + p100_right.get('snr'))), 'iold_ms': json_safe_float(iold_ms), 'flag': bool(abs(iold_ms) > flag_threshold_ms), } @@ -175,11 +254,71 @@ def compute_iold_per_size(epochs, event_id, ch_name, ev = trimmed_average(epochs[cond_key]).copy().pick([ch_name]) _, p100, _ = get_pr_vep_latencies(ev) peaks[eye] = p100 - out[size] = compute_iold(peaks.get('left_eye'), peaks.get('right_eye'), - flag_threshold_ms=flag_threshold_ms) + iold = compute_iold(peaks.get('left_eye'), peaks.get('right_eye'), + flag_threshold_ms=flag_threshold_ms) + recovery = compute_p100_recovery(peaks.get('left_eye'), + peaks.get('right_eye')) + out[size] = {**(iold or {}), 'recovery': recovery} if iold else \ + {'recovery': recovery} return out +def compute_p100_recovery(p100_left, p100_right, min_snr=PEAK_MIN_SNR): + """Detectable / not-detectable status for longitudinal P100 recovery tracking. + + Distinct from latency: tracks whether the P100 was *measurable at all* + against the noise floor. In demyelinating disease the parvocellular + (small-check) P100 may sit below noise at baseline and transition to + detectable as remyelination progresses. The state transition itself is + a clinical biomarker — independent of any latency value. + + Returns per-eye ``{detectable, snr, amp_uv, latency_ms}`` plus a + session-level summary that can be plotted longitudinally without + losing the "not-detectable" sessions to NaN-holes: + - ``eyes_detectable``: 0/1/2 — count of eyes above the SNR gate. + - ``mean_snr``: average SNR across detectable eyes (0 if none). + - ``recovery_score``: composite score in [0, 1+] suitable for trend + plots. Floor 0 = "neither eye detectable"; 1 = "both detectable at + threshold SNR"; >1 = "both detectable, with margin above threshold". + """ + def _eye_summary(p): + if p is None: + return {'detectable': False, + 'snr': None, + 'amp_uv': None, + 'latency_ms': None} + snr = p.get('peak_to_trough_snr', p.get('snr')) + amp = p.get('peak_to_trough', p['amplitude']) + return { + 'detectable': bool(snr is not None and snr >= min_snr), + 'snr': json_safe_float(snr), + 'amp_uv': json_safe_float(amp * 1e6), + 'latency_ms': json_safe_float(p['latency'] * 1000.0), + } + + left = _eye_summary(p100_left) + right = _eye_summary(p100_right) + detected_snrs = [s for s, d in [(left['snr'], left['detectable']), + (right['snr'], right['detectable'])] + if d and s is not None] + mean_snr = float(np.mean(detected_snrs)) if detected_snrs else 0.0 + # Composite score: average SNR / threshold across both eyes. + # 0 if neither detectable, 1 = both at threshold, >1 = above threshold. + eye_scores = [ + (left['snr'] / min_snr) if (left['detectable'] and left['snr'] is not None) else 0.0, + (right['snr'] / min_snr) if (right['detectable'] and right['snr'] is not None) else 0.0, + ] + recovery_score = float(np.mean(eye_scores)) + return { + 'left': left, + 'right': right, + 'eyes_detectable': int(left['detectable']) + int(right['detectable']), + 'mean_snr': json_safe_float(mean_snr), + 'recovery_score': json_safe_float(recovery_score), + 'min_snr_threshold': float(min_snr), + } + + def compute_amplitude_ratio(p100_left, p100_right, log2_flag=LOG2_AMP_FLAG): """P100 amplitude ratio L/R (rectified) and log2 ratio. @@ -188,8 +327,10 @@ def compute_amplitude_ratio(p100_left, p100_right, log2_flag=LOG2_AMP_FLAG): """ if p100_left is None or p100_right is None: return None - amp_l_uv = abs(p100_left['amplitude']) * 1e6 - amp_r_uv = abs(p100_right['amplitude']) * 1e6 + # Peak-to-trough where available (stable against DC pedestal); abs() so + # the ratio is sign-invariant in case one trace flipped polarity. + amp_l_uv = abs(p100_left.get('peak_to_trough', p100_left['amplitude'])) * 1e6 + amp_r_uv = abs(p100_right.get('peak_to_trough', p100_right['amplitude'])) * 1e6 if amp_r_uv <= 0: return None ratio = amp_l_uv / amp_r_uv @@ -327,8 +468,9 @@ def compute_hemi_asymmetry(evoked_avg, ch_left, ch_right, return None lat_l = p100_l['latency'] * 1000.0 lat_r = p100_r['latency'] * 1000.0 - amp_l = abs(p100_l['amplitude']) * 1e6 - amp_r = abs(p100_r['amplitude']) * 1e6 + # Peak-to-trough where available; abs() to keep ratio sign-invariant. + amp_l = abs(p100_l.get('peak_to_trough', p100_l['amplitude'])) * 1e6 + amp_r = abs(p100_r.get('peak_to_trough', p100_r['amplitude'])) * 1e6 lat_diff = lat_l - lat_r amp_ratio = amp_l / amp_r if amp_r > 0 else float('inf') log2_ratio = float(np.log2(amp_ratio)) if amp_r > 0 else float('nan') @@ -337,6 +479,10 @@ def compute_hemi_asymmetry(evoked_avg, ch_left, ch_right, f'lat_{ch_right.lower()}': json_safe_float(lat_r), f'amp_{ch_left.lower()}': json_safe_float(amp_l), f'amp_{ch_right.lower()}': json_safe_float(amp_r), + f'snr_{ch_left.lower()}': json_safe_float(p100_l.get('peak_to_trough_snr', + p100_l.get('snr'))), + f'snr_{ch_right.lower()}': json_safe_float(p100_r.get('peak_to_trough_snr', + p100_r.get('snr'))), 'lat_diff_ms': json_safe_float(lat_diff), 'amp_ratio': json_safe_float(amp_ratio), 'log2_ratio': json_safe_float(log2_ratio), diff --git a/eegnb/devices/eeg.py b/eegnb/devices/eeg.py index 46941395c..8c057e3ef 100644 --- a/eegnb/devices/eeg.py +++ b/eegnb/devices/eeg.py @@ -88,6 +88,7 @@ def __init__( ip_addr=None, ch_names=None, config=None, + analog_mode=False, make_logfile=False): """The initialization function takes the name of the EEG device and determines whether or not the device belongs to the Muse or Brainflow families and initializes the appropriate backend. @@ -107,6 +108,12 @@ def __init__( self.ip_addr = ip_addr self.other = other self.config = config + # Cyton-only: switch the board into analog read mode (firmware cmd /2) + # so the AUX header pins (A5-A7) stream alongside the EEG channels. + # Tradeoff: analog mode replaces the on-board accelerometer data with + # the analog reads. Use when you have a photodiode / external sensor + # wired to AUX and don't need accel. + self.analog_mode = analog_mode self.make_logfile = make_logfile # currently only used for kf self.backend = self._get_backend(self.device_name) self.initialize_backend() @@ -354,6 +361,12 @@ def _init_brainflow(self): response = self.board.config_board(self.config) print(f"[config_board] {self.config!r} -> {response!r}") + # Cyton: enable analog read mode so AUX header pins (A5-A7) stream + # alongside the EEG channels. Replaces accelerometer data. + if self.analog_mode and 'cyton' in (self.device_name or ''): + response = self.board.config_board('/2') + print(f"[cyton analog mode] /2 -> {response!r}") + def _start_brainflow(self): # only start stream if non exists if not self.stream_started: @@ -438,6 +451,19 @@ def _brainflow_extract(self, data): if actual_gain != brainflow_assumed_gain: eeg_data = eeg_data * (brainflow_assumed_gain / actual_gain) + # Append analog (AUX) channels when Cyton is in analog mode. Useful + # for photodiode triggers and other external sensors that need to be + # sampled in lockstep with the EEG. + if self.analog_mode: + try: + analog_idx = BoardShim.get_analog_channels(self.brainflow_id) + if len(analog_idx): + aux_data = data[:, analog_idx] + eeg_data = np.append(eeg_data, aux_data, axis=1) + ch_names = list(ch_names) + [f"AUX{i}" for i in range(len(analog_idx))] + except Exception as e: + logger.warning("could not read analog channels: %s", e) + return ch_names, eeg_data, timestamps def _brainflow_push_sample(self, marker): diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index 76b8dd020..d6aeda2ae 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -19,12 +19,14 @@ from time import time import random import json +import csv import numpy as np from pandas import DataFrame from eegnb import generate_save_fn from eegnb.experiments import diagnostics +from eegnb.utils.display import snap_refresh_rate logger = logging.getLogger(__name__) @@ -89,6 +91,14 @@ def __init__(self, exp_name, duration, eeg, save_fn, n_trials: int, iti: float, # Hardware/software *emitters* (Cyton, XID, kernelflow, etc.) live in # self.devices and are dispatched via push_sample, not this list. self.marker_listeners: list = [] + self.monitor_timing_data: list = [] + + if not self.use_vr: + def _record_monitor_timing(trial_idx, timestamp, flip_time=None): + # timestamp is software_time (when marker is pushed) + # flip_time is when the frame actually appeared + self.monitor_timing_data.append([trial_idx, timestamp, flip_time]) + self.marker_listeners.append(_record_monitor_timing) # Initializing the marker names self.markernames = [1, 2] @@ -172,6 +182,11 @@ def setup(self, instructions=True): } self.window.mouseVisible = False + # Snap the target rate to the nearest standard panel rate so + # downstream stimulus code can rely on a clean integer Hz. + target = self.display_check.get('target_hz') + self.refresh_rate = snap_refresh_rate(target) if target else None + # Loading the stimulus from the specific experiment, throws an error if not overwritten in the specific experiment self.stim = self.load_stimulus() @@ -500,6 +515,18 @@ def _report_frame_stats(self): }, f, indent=2) print(f" Saved to {stats_path}") + def _save_monitor_telemetry(self): + """Saves memory-buffered monitor timing telemetry to a CSV sidecar.""" + if self.save_fn is None or not self.monitor_timing_data: + return + + timing_path = self.save_fn.with_name(self.save_fn.stem + '_timing.csv') + with open(timing_path, 'w', newline='') as f: + writer = csv.writer(f) + writer.writerow(['trial_idx', 'software_time', 'flip_time']) + writer.writerows(self.monitor_timing_data) + print(f" Saved monitor timing telemetry to {timing_path}") + def run(self, instructions=True): """ Run the experiment """ self.signal_check = diagnostics.check_signal_quality(self.eeg) @@ -540,6 +567,8 @@ def run(self, instructions=True): if self.use_vr: self.vr.save_telemetry(self.save_fn) + else: + self._save_monitor_telemetry() # Post-run hook (e.g. show a summary / quality report screen) self.post_run() @@ -576,3 +605,16 @@ def push_marker(self, marker, trial_idx): def name(self) -> str: """ This experiment's name """ return self.exp_name + import inspect + sig = inspect.signature(listener) + if 'flip_time' in sig.parameters: + listener(trial_idx, timestamp, flip_time=flip_time) + else: + listener(trial_idx, timestamp) + except Exception: + logger.exception("marker listener failed: %s", listener) + + @property + def name(self) -> str: + """ This experiment's name """ + return self.exp_name diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index 0dfcc1e09..43f229aa4 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -84,11 +84,6 @@ def __init__(self, eeg: Optional[EEG] = None, save_fn=None, [lbl for lbl in self.block_labels for _ in range(block_trial_size)] ) - # Photodiode trigger: number of frames a white flash is rendered into - # the occluded-eye buffer on each reversal. Set to N at every reversal - # in present_stimulus(), counts down in draw_frame(). - self._flash_frames_remaining = 0 - self._flash_frames_per_reversal = 3 # ------------------------------------------------------------------ # Stimulus creation helpers @@ -108,10 +103,8 @@ def make_checker_image(intensity_checks, check_deg, field_deg=ISCEV_FIELD_DEG, p )['img'] def load_stimulus(self) -> Dict[str, Any]: - refresh_rate = int(np.round( - self.window.displayRefreshRate if self.use_vr - else self.window.getActualFrameRate() - )) + refresh_rate = self.refresh_rate + reversals_per_sec = 1 / self.soa assert refresh_rate % reversals_per_sec == 0, ( f"Frame rate {refresh_rate} Hz must be an integer multiple of " @@ -140,14 +133,25 @@ def load_stimulus(self) -> Dict[str, Any]: width=self.window.size[0], height=self.window.size[1], fillColor='black', ) - # Photodiode target: small white square in the bottom-outer corner of - # the occluded-eye buffer. Position is set per-frame in draw_frame() - # so the flash sits on the ear-side of whichever eye is occluded. - self._flash_size_px = 200 - self.white_flash = visual.Rect( + # Photodiode target: square that toggles in lockstep with the + # checkerboard reversal phase. Drawn every frame; fillColor, size, + # and position are set per-frame in draw_frame(). Reversing (rather + # than pulsing) lets the diode trace mirror the reversal directly: + # a polarity flip on the diode = a checkerboard reversal at that + # exact frame, with no marker-vs-stimulus latency question. + # + # Flat-monitor patch is small and corner-positioned (visible screen, + # mustn't intrude on stimulus). VR patch is large and centred on the + # closed-eye buffer — the user can't see it, so a big centred patch + # makes diode placement forgiving (any position over the central lens + # area picks up the transitions). VR patch uses mid-grey ↔ light-grey + # instead of black ↔ white so any eye-pad seal failure exposes the + # eye to lower-amplitude reversing luminance. + self._flash_size_px = 100 # flat-monitor corner patch (px) + self._vr_patch_size_px = 1000 # VR centred patch (px square) + self.photodiode_patch = visual.Rect( self.window, width=self._flash_size_px, height=self._flash_size_px, - fillColor='white', units='pix', ) @@ -292,14 +296,12 @@ def present_stimulus(self, idx: int): # encodes the full condition (eye × check-size) for the analysis. if idx == 0: c = CONDITIONS[self.block_labels[self.current_block_index]] - self.push_vr_marker( + self.push_marker( EVENTS[f"block/{c['eye']}/{c['size_name']}"], self.current_block_index * self.block_trial_size, ) - # Arm the photodiode flash for this reversal; draw_frame() decrements. - self._flash_frames_remaining = self._flash_frames_per_reversal - self.draw_frame(idx) - self.push_marker(idx) + flip_time = self.draw_frame(idx) + self._push_reversal_marker(idx, flip_time) def draw_frame(self, idx: int): trial_idx = self.current_block_index * self.block_trial_size + idx @@ -308,39 +310,48 @@ def draw_frame(self, idx: int): phase = idx % 2 # alternates 0 / 1 for each reversal if self.use_vr: + # Centred mid-grey ↔ light-grey patch on the closed-eye buffer: + # large enough that diode position over the central lens is + # uncritical, dim enough that an imperfect eye-pad seal exposes + # the eye to mild rather than full-contrast reversing luminance. + # PsychoPy normalised colours: -0.4 ≈ 30% grey, +0.4 ≈ 70% grey. + self.photodiode_patch.fillColor = (+0.4, +0.4, +0.4) if phase == 0 else (-0.4, -0.4, -0.4) + self.photodiode_patch.size = (self._vr_patch_size_px, self._vr_patch_size_px) + closed_eye = 'right' if eye == 'left' else 'left' self.window.setBuffer(eye) self.grey_background.draw() self.stim[eye]['checkerboards'][size_idx][phase].draw() self.stim[eye]['fixation'].draw() self.window.setBuffer(closed_eye) - if self._flash_frames_remaining > 0: - self.black_background.draw() - # Bottom of the buffer, slightly off-centre on the ear side. - # Quest 2 lenses clip the buffer corners aggressively, so - # `bottom-edge corner` is invisible; sit the flash 25% in from - # the edge along x and 25% up from the bottom along y. - bw, bh = self.window.size[0], self.window.size[1] - sign = -1 if closed_eye == 'left' else +1 - self.white_flash.pos = ( - sign * (bw * 0.25), - -bh * 0.25, - ) - self.white_flash.draw() - self._flash_frames_remaining -= 1 - else: - self.black_background.draw() + self.black_background.draw() + self.photodiode_patch.pos = (0, 0) # centred on closed-eye buffer + self.photodiode_patch.draw() else: + # Flat monitor: small corner patch, full black ↔ white modulation + # (the diode sees the corner of the actual visible screen, so we + # want maximum contrast for SNR; the user fixates centre). + self.photodiode_patch.fillColor = 'white' if phase == 0 else 'black' + self.photodiode_patch.size = (self._flash_size_px, self._flash_size_px) + self.grey_background.draw() self.stim['monoscopic']['checkerboards'][size_idx][phase].draw() self.stim['monoscopic']['fixation'].draw() + # Bottom-right corner, flush against the screen edge — sit the + # photodiode sensor over this region. + bw, bh = self.window.size[0], self.window.size[1] + self.photodiode_patch.pos = ( + (bw - self._flash_size_px) / 2, + -(bh - self._flash_size_px) / 2, + ) + self.photodiode_patch.draw() self.window.flip() - def push_marker(self, idx: int): + def _push_reversal_marker(self, idx: int): trial_idx = self.current_block_index * self.block_trial_size + idx c = CONDITIONS[int(self.parameter[trial_idx])] - self.push_vr_marker(EVENTS[f"rev/{c['eye']}/{c['size_name']}"], trial_idx) + self.push_marker(EVENTS[f"rev/{c['eye']}/{c['size_name']}"], trial_idx) def present_soa(self, idx: int): # Keep the compositor fed at full frame rate; no marker push. @@ -354,3 +365,4 @@ def present_iti(self): else: self.grey_background.draw() self.window.flip() +window.flip() diff --git a/eegnb/utils/display.py b/eegnb/utils/display.py new file mode 100644 index 000000000..406c117b4 --- /dev/null +++ b/eegnb/utils/display.py @@ -0,0 +1,30 @@ +"""Display-related helpers shared across experiments and example scripts.""" + +import logging + +# Common panel refresh rates seen on consumer monitors and HMDs. +STANDARD_REFRESH_HZ = (60, 72, 75, 90, 100, 120, 144, 165, 240) + + +def snap_refresh_rate(measured_hz: float, tolerance_pct: float = 3.0) -> int: + """Snap a noisy measured refresh rate to the nearest standard panel rate. + + PsychoPy's getActualFrameRate() and libovr's displayRefreshRate both + occasionally report a value 1-2 Hz off the nominal panel rate due to + measurement jitter or runtime quirks. This helper rounds them back to + something physically meaningful. + + Falls back to the rounded measured value (with a warning) when the + measurement is more than tolerance_pct away from any standard rate, so + truly unusual panels (e.g. 85 Hz CRTs) still pass through correctly. + """ + snapped = min(STANDARD_REFRESH_HZ, key=lambda h: abs(h - measured_hz)) + if abs(snapped - measured_hz) / snapped * 100 > tolerance_pct: + rounded = int(round(measured_hz)) + logging.warning( + "[display] measured refresh rate %.2f Hz didn't match any " + "standard rate within %.1f%%; using rounded %d Hz", + measured_hz, tolerance_pct, rounded, + ) + return rounded + return snapped diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index 76acf886f..48535e271 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -22,6 +22,7 @@ # # Imports +import os import platform from os import getenv from dotenv import load_dotenv @@ -31,6 +32,7 @@ from eegnb.devices import CYTON_CONFIG_GAIN_4X from eegnb.devices.eeg import EEG from eegnb.experiments.visual_vep import VisualPatternReversalVEP +from eegnb.utils.display import snap_refresh_rate ################################################################################################### # Configuration @@ -40,7 +42,7 @@ # # Display: set use_vr=True for Meta Quest, False for monitor -use_vr = True +use_vr = False # Device: "cyton", "unicorn", "muse2", etc. device = "cyton" @@ -48,26 +50,41 @@ # Serial port: "COM3" for Windows, "/dev/ttyUSB0" for Linux serial_port = "COM3" -# Config: CYTON_CONFIG_GAIN_4X needed for Thinkpulse active electrodes, otherwise leave as None. -config = CYTON_CONFIG_GAIN_4X +# Per-cap channel names, in Cyton input order (1..8). Personal hardware, +# not part of the shared library. Add a new entry when you set up a new cap. +MONTAGES = { + # 3D-printed mark-iv occipital array. Ground A2, Ref Fz. + "thinkpulse-mark-iv": ["P7", "P8", "PO3", "PO4", "O1", "O2", "POz", "Oz"], + # Standard 10-20 cap (Tencom 20-ch). Ground A2, Ref Fz. + "tencom-20-cap": ["P3", "P4", "P7", "P8", "Pz", "Oz", "O1", "O2"], +} -# Electrode montage type: "cap" or "mark-iv" -montage_type = "mark-iv" +# Personal monitor specs — refresh rate is used for the save path and for +# the integer-multiple assertion in load_stimulus(). +MONITORS = { + "acer-34-predator": {"hz": 100}, +} -# Ground A2, Ref Fz. -ch_names = ["A1", "A2", "PO7", "PO8", "Oz", "Oz", "O1", "O2"] +# ---- pick montage and monitor for this session -------------------------- +montage_type = "thinkpulse-mark-iv" +config = CYTON_CONFIG_GAIN_4X if montage_type == "thinkpulse-mark-iv" else None + +monitor_name = "acer-34-predator" +ch_names = MONTAGES[montage_type] # Subject and session identifiers subject_id = 0 -session_nb = 17 +session_nb = 18 ################################################################################################### # Initiate EEG device # --------------------- # # Start EEG device based on configuration above. -eeg_device = EEG(device, serial_port=serial_port, ch_names=ch_names, config=config) -#eeg_device = EEG(device="synthetic") +eeg_device = EEG(device, serial_port=serial_port, ch_names=ch_names, + config=config, + analog_mode=True) # stream AUX (A5-A7) for photodiode trigger +# eeg_device = EEG(device="synthetic") ################################################################################################### # Build experiment object and detect display settings @@ -76,21 +93,20 @@ # The experiment is constructed before the save path so the Rift session is # already open and we can read the actual refresh rate from the runtime rather # than hardcoding it. The save path is then built from the real Hz and set on -# the experiment before run() is called. +# the experiment before run() is called. pattern_reversal_vep = VisualPatternReversalVEP( eeg=eeg_device, - use_vr=use_vr + use_vr=use_vr, + use_fullscr=True ) if use_vr: - _QUEST_HZ = [72, 90, 120] # nominal Meta Quest refresh rates - _raw_hz = pattern_reversal_vep.vr.displayRefreshRate - refresh_rate = min(_QUEST_HZ, key=lambda h: abs(h - _raw_hz)) + refresh_rate = snap_refresh_rate(pattern_reversal_vep.vr.displayRefreshRate) display = f"quest-2_{refresh_rate}Hz" else: - refresh_rate = 100 # flat display fallback — update for your monitor - display = f"acer-34-predator_{refresh_rate}Hz" + refresh_rate = MONITORS[monitor_name]["hz"] + display = f"{monitor_name}_{refresh_rate}Hz" site = f"{display}_{montage_type}" data_dir = getenv("DATA_DIR") diff --git a/examples/visual_vep/01r__pattern_reversal_viz.py b/examples/visual_vep/01r__pattern_reversal_viz.py deleted file mode 100644 index 03b6c920f..000000000 --- a/examples/visual_vep/01r__pattern_reversal_viz.py +++ /dev/null @@ -1,2010 +0,0 @@ -# --- -# jupyter: -# jupytext: -# formats: ipynb,py:sphinx -# text_representation: -# extension: .py -# format_name: sphinx -# format_version: '1.1' -# jupytext_version: 1.19.1 -# kernelspec: -# display_name: eeg-experiments -# language: python -# name: python3 -# --- - -""" - -# Pattern Reversal VEP: Load and Visualize - -This example demonstrates loading, organizing, and visualizing evoked response -data from the Visual Pattern Reversal VEP (PR-VEP) experiment. - -An animation of a checkerboard reversal is shown (the checkerboard squares' -colours are toggled once each half a second). Stimulus is rendered stereoscopically -through a Meta Quest HMD, with synchronization markers (triggers) sent to the OpenBCI Cyton. - -The data used is recorded using an OpenBCI Cyton with a Tencom 20 channel cap, -with cup electrodes placed at M1 reference, Fz, Pz, P7, P8, O1, O2, Oz, M2 and an ear-clip on A2 for ground. - -Per-trial PC-side latency correction is applied using ``app_motion_to_photon_latency_s`` -from the LibOVR compositor frame stats sidecar, and the residual Quest Link + -panel lag is handled by a fixed ``link_panel_lag`` constant. - -**12 biomarkers** are computed, grouped into three sections: - -- **Pre-chiasmatic / optic nerve** (BM1–BM5): inter-ocular latency difference - (IOLD), per-size IOLD, spatial-frequency slope, amplitude ratio, bootstrap CIs. -- **Morphological** (BM6): W-peak / bifurcated P100 detection. -- **Post-chiasmatic / cortical** (BM7–BM12): hemispheric O1/O2 asymmetry, - inter-ocular Δ-asymmetry, lateral P7/P8, lateral Δ-asymmetry, composite - hemispheres, topology QC. - -Results are persisted to ``biomarkers.json`` in the recording directory and -consumed by ``02r__pattern_reversal_longitudinal.py`` for trend analysis. - -""" - -############################################################################### -# ## Setup -# -# - -import os -import json -import datetime -import numpy as np -import warnings -warnings.filterwarnings('ignore') - -import matplotlib.pyplot as plt -plt.ion() -import pandas as pd - -from scipy.stats import trim_mean -from scipy.signal import find_peaks - -from mne import Epochs, EvokedArray, find_events, concatenate_raws - -from eegnb import get_recording_dir -from eegnb.analysis.utils import load_csv_as_raw -from eegnb.datasets import fetch_dataset -from eegnb.analysis.vep_utils import ( - get_pr_vep_latencies, - ISCEV_CHECK_DEG_LARGE, ISCEV_CHECK_DEG_SMALL, - IOLD_FLAG_MS, LOG2_AMP_FLAG, - trimmed_average, json_safe_float, - compute_iold, compute_iold_per_size, compute_amplitude_ratio, compute_check_size_slope, - bootstrap_p100_latency, compute_hemi_asymmetry, compute_hemi_delta_asymmetry, -) -_f = json_safe_float -from eegnb.devices.utils import EEG_INDICES, SAMPLE_FREQS - -# sphinx_gallery_thumbnail_number = 3 - -############################################################################### -# ## Hardware lag definitions (PsychoPy / Meta-Link path) -# -# -# Meta-Link path total flip-return → photon delay on this rig is split into a measured -# part and an unmeasured residual: -# -# - **Measured per-trial (PC side)**: ``app_motion_to_photon_latency_s`` from -# LibOVR frame stats, applied trial-by-trial below. -# - **Residual fit (link_panel_lag)**: Quest Link video encode/decode + USB transport -# + panel scan-out + LCD response. Rough budgets from public benchmarks: -# Link transport ≈ 20–40 ms, Panel + LCD ≈ 10–20 ms, total range ≈ 30–60 ms. -# The Cyton RF transmission adds a further unmeasured ~1–5 ms (proprietary stack, -# not standard BLE). -# -# -# - -############################################################################### -# ## Stimulus calibration caveat -- Quest panel is not ISCEV-calibrated -# -# Clinical PR-VEP norms (P100 ~100 ms, ~10-20 uV at Oz-Fz on adults) are -# derived from photometrically-spec'd CRT or LCD monitors at a fixed -# viewing distance. The Quest setup deviates on the panel-photometry -# axis -- the Quest 2 fast-switching LCD is not calibrated to a specific -# cd/m^2 or contrast ratio. Cortical drive (and therefore P100 amplitude) -# scales with these, so absolute amplitudes will diverge from clinical -# norms by a constant factor. -# -# Fortunately, this is still highly effective for differential analysis! -# Because the display characteristics are stable, within-subject comparisons -# (like inter-ocular differences) remain extremely robust. Furthermore, the -# fast-switching LCD provides excellent temporal precision, yielding highly -# reliable latency measurements despite the absolute amplitude shift. -# -# Field & check size are NOT a calibration concern on this path. The -# stimulus is rendered at a runtime-derived PPD (Pixels Per Degree at -# field centre) read from the OVR runtime each session via -# ``Rift.pixelsPerTanAngleAtCenter`` -- not estimated from a spec sheet. -# IPD (Inter-Pupillary Distance, the distance between the user's pupils -# in mm) is similarly read from the runtime via ``eyeToNoseDistance`` and -# is already baked into the per-eye projection matrices PsychoPy uses, -# so it does not bias the angular extent of stimulus content. Both PPD -# and IPD are written into the ``_timing.csv`` header at session start -# (see ``log_display_info`` in ``eegnb/devices/vr.py``), and -# the stimupy checkerboard is then sized by a prescribed degrees-per-check -# value (1.0 deg = 60 arcmin = ISCEV "large", 0.25 deg = 15 arcmin = -# ISCEV "small"). Compositor barrel-distortion correction is applied -# downstream of the rendered eye-buffer texture and does not enter the -# calculation. The residual uncertainty (much smaller than a spec-sheet -# estimate) comes from eye relief -- how far the user's pupil sits from -# the lens, which slightly biases off-axis angular size and peripheral -# vignetting -- and per-unit lens manufacturing variance. Both affect -# peripheral checks more than the foveal ones that drive P100, so for -# ISCEV-relevant central-field analysis the residual is well under 1%. -# -# Expected morphology differences (to characterise as more recordings come in): -# - Larger early negative deflections (N75-ish) plausible if panel contrast -# / field size drives stronger extrastriate contribution than clinical -# norms assume. -# - Latency offset ~10-20 ms on the Meta-Link path. -# -# Absolute P100 latency / amplitude here are NOT interchangeable with -# clinical PR-VEP norms. Differential biomarkers (IOLD, slope, amplitude -# ratio) are robust to these confounds and remain interpretable. -# -# -# - -############################################################################### -# ## Bracketing / replacing ``link_panel_lag`` empirically -# -# The 25 ± 15 ms residual below is a budgeted estimate, not a measurement. -# Differential biomarkers (IOLD, slopes, ratios, Δ-asymmetry) are robust to -# this offset because both eyes share the same path, so the residual cancels -# in any L−R contrast. Absolute P100 latency (vs clinical norms) does NOT -# survive the residual and should not be reported as a clinical number until -# the residual is pinned down. Two paths to do that, in increasing order of -# rigour: -# -# 1. **Software baseline (error-prone, free).** Run a session on a control -# subject with intact optic pathways and compare the measured P100 (after -# PC-side correction only, ``link_panel_lag = 0``) to the clinical norm -# (~100 ms at 60 arcmin on a calibrated CRT). The shift between observed -# and norm is the residual. Caveats: the Quest panel isn't ISCEV-calibrated -# so contrast/luminance will perturb absolute latency by an unknown amount -# on top of the chain delay; controls vary ±5–10 ms at baseline; and any -# one subject's value is noisy. Useful to *bracket* the residual to within -# ~10 ms but not to certify it. -# -# 2. **Photodiode / optode (gold standard).** Tape a photodiode onto one HMD -# eye lens facing the panel and route its analogue output to a Cyton aux -# channel (or a second trigger line). The diode fires when actual photons -# arrive at the eye — i.e. measures the entire chain (PsychoPy flip → -# Quest Link → panel scan-out → LCD response) in a single sample. With a -# photodiode trigger present, ``link_panel_lag`` becomes 0 by construction -# and the per-trial PC-side correction is no longer needed either: -# epoching off the diode event aligns trials to actual stimulus onset -# with sub-frame precision. This makes absolute P100 latency a usable -# biomarker rather than an estimate. The native-Quest absolute-latency -# target supersedes this on its release path; for the meta-link path here, -# a diode would close the gap immediately. -# -# ############################################################################## - -# Center of estimated unmeasured residual range (s) -link_panel_lag = 0.025 -# ± half-range (s) -link_panel_lag_err = 0.015 - -############################################################################### -# ## Load Data -# -# Load all recordings for the session and concatenate into a single raw object. -# The timing sidecar CSV is parsed per-file and concatenated to match events. -# - - -# --- CHANGE THESE PLACEHOLDERS TO POINT AT YOUR OWN RECORDING --------------- -SUBJECT_ID = 0 -SESSION_NB = 16 -DEVICE_NAME = 'cyton' -EXPERIMENT = 'visual-PRVEP' -DISPLAY = 'quest-2_120Hz' -MONTAGE = 'cap' -SITE = f'eegnb_examples/{DISPLAY}_{MONTAGE}' -# From session 016 the Fz cup moved to the SRB pin (hardware reference) and -# the old M1 cup moved to channel 1. Applied per-recording at load time so -# recordings with the old CSV header ('Fz') and new ('M1') can be concatenated. -CH_REMAP = {'Fz': 'M1'} if SESSION_NB >= 16 else {} -# Minimum recording duration — skips short setup/restart runs. -# Move unwanted longer recordings to bad_recordings/ in the session directory; -# the glob will not find them there. -MIN_RECORDING_SECS = 120 -# --------------------------------------------------------------------------- - -eegnb_data_path = os.path.join(os.path.expanduser('~/'), '.eegnb', 'data') -prvep_data_path = os.path.join(eegnb_data_path, EXPERIMENT, 'eegnb_examples') - -if not os.path.isdir(prvep_data_path): - print("Downloading PR-VEP example dataset from Google Drive...") - fetch_dataset(data_dir=eegnb_data_path, experiment=EXPERIMENT, site='eegnb_examples') - -recording_dir = get_recording_dir(DEVICE_NAME, EXPERIMENT, SUBJECT_ID, SESSION_NB, site=SITE) -print(f"[data] recording dir: {recording_dir}") - -all_files = sorted(p for p in recording_dir.glob('*.csv') if not p.stem.endswith('_timing')) -print(f"[data] found {len(all_files)} EEG recording(s): {[p.name for p in all_files]}") - -recording_files = [] -for p in all_files: - timing_path = p.with_name(p.stem + '_timing.csv') - if not timing_path.exists(): - print(f"[skip] No timing sidecar: {p.name}") - continue - n_rows = sum(1 for _ in open(p)) - 1 - dur_secs = n_rows / 250 - if dur_secs < MIN_RECORDING_SECS: - print(f"[skip] Too short ({dur_secs:.0f}s < {MIN_RECORDING_SECS}s): {p.name}") - continue - recording_files.append(p) - -print(f"[data] using {len(recording_files)} recording(s): {[p.name for p in recording_files]}") - -per_recording = [] -for p in recording_files: - timing_path = p.with_name(p.stem + '_timing.csv') - - rec_raw = load_csv_as_raw([str(p)], sfreq=250, ch_ind=EEG_INDICES['cyton'], - aux_ind=None, replace_ch_names=None, verbose=False) - - if CH_REMAP: - remap = {k: v for k, v in CH_REMAP.items() if k in rec_raw.ch_names} - if remap: - rec_raw.rename_channels(remap) - - rec_timing = pd.read_csv(timing_path, comment='#').reset_index(drop=True) - rec_events = find_events(rec_raw, shortest_event=1, verbose=False) - - n = min(len(rec_events), len(rec_timing)) - if len(rec_events) != len(rec_timing): - print(f"[warn] {p.name}: events={len(rec_events)}, timing={len(rec_timing)} — truncating to {n}") - per_recording.append({ - 'raw': rec_raw, - 'events': rec_events[:n], - 'timing': rec_timing.iloc[:n].reset_index(drop=True), - }) - -if not per_recording: - raise RuntimeError( - f"No recordings loaded from {recording_dir}. " - "Check SUBJECT_ID, SESSION_NB, DEVICE_NAME, and MIN_RECORDING_SECS." - ) - -raw, events = concatenate_raws( - [rec['raw'] for rec in per_recording], - events_list=[rec['events'] for rec in per_recording], -) -timing_df = pd.concat([rec['timing'] for rec in per_recording], ignore_index=True) -assert len(events) == len(timing_df), "per-file truncation should keep events and timing aligned" - -print(f"\n[raw] sfreq={raw.info['sfreq']} Hz, n_samples={raw.n_times}, duration={raw.times[-1]:.1f}s") -print(f"[raw] channels: {raw.ch_names}") - -############################################################################### -# ## Recording quality diagnostic -# -# Two-stage contact quality check: -# -# 1. **Raw CSV (here)** — std / drift / p99 per channel directly from the recorded CSV, before any MNE processing. Mean-subtracts before computing metrics so DC offset does not inflate the flags. Detects whether flagged channels are isolated contacts or shared across all channels (loose M1/SRB reference). -# 2. **Post-epoch baseline (below, after epoching)** — pre-stimulus baseline RMS per channel after filtering + referencing. Absolute values are interpretable here; provides SNR at Oz and a go/no-go recommendation. - -import sys, pathlib -sys.path.insert(0, str(pathlib.Path(globals()['_dh'][0]).resolve().parents[3])) -from eegnb.analysis.recording_quality import check_session - -_rq = check_session(recording_dir) -print(_rq['report']) - -if _rq['shared_ref_suspect']: - print() - print("=" * 60) - print("⚑ SHARED REFERENCE SUSPECT (M1/SRB loose)") - print(" All-channel noise inflation detected.") - print(" Every channel recorded through this reference is") - print(" compromised. Biomarkers that depend on absolute") - print(" amplitude or inter-channel ratios are unreliable.") - print(" Re-seat M1 and re-record before trusting results.") - print("=" * 60) -elif _rq['flagged_channels']: - print(f"\n⚑ Flagged channels: {', '.join(_rq['flagged_channels'])}") - print(" Isolated contact issue(s) — other channels are ok.") -else: - print("\nAll channels within normal range — contact quality ok.") - -############################################################################### -# ## Visualize the power spectrum -# -# - -raw.plot_psd() - -############################################################################### -# ## Filtering -# -# Use FIR (linear phase) rather than IIR to avoid frequency-dependent group delay, -# which would shift the P100 peak by an amount that depends on its spectral content, -# contaminating latency measurements. MNE's zero-phase FIR cancels even the constant -# delay so the filtered P100 sits at the same sample as the unfiltered one. -# Using ISCEV bandpass standard: 1–100 Hz. -# -# -# - -hp, lp = 1, 100 -raw.filter(hp, lp, method='fir') - -############################################################################### -# ## Per-trial PC-side photon-latency correction -# -# Each event sample index is shifted by the per-trial measured -# ``app_motion_to_photon_latency_s`` from LibOVR frame stats — a retrospective -# measurement of how long the frame actually took to reach the compositor/vsync. -# -# Missing trials (typically the first frame or two before perf stats are populated) -# fall back to the session mean. -# -# -# - -pc_lag_s = timing_df['app_motion_to_photon_latency_s'].values.astype(float) -valid = np.isfinite(pc_lag_s) & (pc_lag_s > 0) -if (~valid).any(): - fallback = pc_lag_s[valid].mean() if valid.any() else 0.0 - print(f"[warn] {int((~valid).sum())}/{len(pc_lag_s)} trials missing " - f"app_motion_to_photon_latency_s — using mean fallback {fallback*1000:.2f} ms") - pc_lag_s = np.where(valid, pc_lag_s, fallback) - -sample_shifts = np.round(pc_lag_s * raw.info['sfreq']).astype(int) -print(f"\n[pc-lag] app_motion_to_photon_latency_s (ms): " - f"min={pc_lag_s.min()*1000:.2f} " - f"max={pc_lag_s.max()*1000:.2f} " - f"mean={pc_lag_s.mean()*1000:.2f} " - f"std={pc_lag_s.std()*1000:.2f} " - f"|shift| samples: max={np.abs(sample_shifts).max()}") - -# Per-trial PC-side-corrected event array. -events_corrected = events.copy() -events_corrected[:, 0] += sample_shifts - -############################################################################### -# ## Hardware lag breakdown chart -# -# - -pc_pipeline_lag = pc_lag_s.mean() * 1000 -unmeasured_lag = link_panel_lag * 1000 - -fig_lag, ax_lag = plt.subplots(figsize=(8, 4)) -y_pos = 0 - -ax_lag.barh(y_pos, pc_pipeline_lag, color='#4c72b0', edgecolor='white', - label=f'PC Pipeline (measured): {pc_pipeline_lag:.1f} ms') -ax_lag.barh(y_pos, unmeasured_lag, left=pc_pipeline_lag, color='#c44e52', edgecolor='white', - label=f'Quest Link + Panel + Cyton RF (unmeasured): {unmeasured_lag:.1f} ms') - -ax_lag.set_yticks([]) -ax_lag.set_xlabel('Latency from Trigger (ms)') -ax_lag.set_title('Composition of VEP Hardware Lag') - -ax_lag.errorbar(pc_pipeline_lag / 2, y_pos, xerr=pc_lag_s.std() * 1000, - color='#aec6e8', capsize=5, lw=2, label='Measured Variance (±1 SD)') -ax_lag.errorbar(pc_pipeline_lag + (unmeasured_lag / 2), y_pos, - xerr=link_panel_lag_err * 1000, - color='black', capsize=5, lw=2, - label=f'Unmeasured Uncertainty (±{link_panel_lag_err*1000:.0f}ms)') - -handles, labels = ax_lag.get_legend_handles_labels() -fig_lag.legend(handles, labels, loc='lower center', bbox_to_anchor=(0.5, 0.0), - ncol=2, fontsize=8, frameon=True) -fig_lag.subplots_adjust(bottom=0.38) - -############################################################################### -# ## Condition decoding -# -# Marker scheme: -# Reversal codes carry both eye and size (1–4). -# Block-start markers (100-103) are pushed at the start of each block but are redundant for trial epoching. -# -# Condition codes: - -COND_TO_INT = { - ('left_eye', 'large'): 1, - ('right_eye', 'large'): 2, - ('left_eye', 'small'): 3, - ('right_eye', 'small'): 4, -} - -# Drop block-start markers (100-103), keeping only the actual reversal markers (1-4). -mask = np.isin(events[:, 2], list(COND_TO_INT.values())) -events = events[mask] -events_corrected = events_corrected[mask] - -############################################################################### -# ## Epoching parameters -# - -event_id = {f"{eye}/{size}": code for (eye, size), code in COND_TO_INT.items()} -for cond, cid in event_id.items(): - n = int((events[:, 2] == cid).sum()) - print(f"[events] {cond}: {n}") - -PICK_CH = 'Oz' # ISCEV-standard electrode -HEMI_CHANNELS = ['O1', 'O2'] # Hemispheric channels for post-chiasmatic analysis -LATERAL_CHANNELS = ['P7', 'P8'] # Lateral extrastriate (V2/V3/MT). Generators on the - # lateral cortical surface project mostly ipsilaterally - # to the scalp, so P7/P8 are far less affected by the - # paradoxical lateralization that makes O1/O2 ambiguous - # for hemispheric localization. This makes P7/P8 a - # relatively direct readout of unilateral lateral- - # occipital / parieto-occipital cortex — useful for - # detecting localized retro-chiasmatic / extrastriate - # involvement (cortical lesions, focal hypofunction) - # that Oz / O1 / O2 alone cannot cleanly side-localize. -# Topology QC channels: Pz gradient + Fz Halliday inversion. Fz is absent -# when it is the hardware reference (session 016+), so filter against what's -# actually recorded to avoid pick errors downstream. -TOPOLOGY_CHANNELS = [ch for ch in ['Pz', 'Fz'] if ch in raw.ch_names] -ALL_PICK_CHANNELS = [PICK_CH] + HEMI_CHANNELS + LATERAL_CHANNELS + TOPOLOGY_CHANNELS -REJECT_UV = 150e-6 -BASELINE = (-0.1, 0) - -LANDMARK_MS = [75, 100, 145] # N75, P100, N145 -LANDMARK_COLORS = ['#888888', 'green', '#555555'] -LANDMARK_LABELS = ['N75 (75 ms)', 'P100 (100 ms)', 'N145 (145 ms)'] - -P100_WIN_MS = (60, 160) # P100 search window (positive max) -CHECK_SIZE_ARCMIN = { - 'large': ISCEV_CHECK_DEG_LARGE * 60.0, # 60 arcmin - 'small': ISCEV_CHECK_DEG_SMALL * 60.0, # 15 arcmin -} - -############################################################################### -# ## Reference scheme selector -# -# Pick which EEG reference to analyse in this notebook run. Re-run the notebook -# with the other value to also persist its biomarkers (the persistence cell at -# the bottom merges into ``biomarkers.json`` rather than overwriting). -# -# - **Fz (ISCEV strict)**: Oz-Fz derivation. The ISCEV 2016 PR-VEP standard -# recommends a mid-frontal reference (Fz), so this scheme is the choice for -# direct comparison against published clinical norms. Trade-off: very -# sensitive to Fz contact quality on dry-electrode rigs -- one bad Fz -# contact can subtract artifact into Oz and invert P100 polarity. -# - **Linked Mastoid M1+M2**: ISCEV lists ear/mastoid as an acceptable -# alternative reference; widely used in cognitive-neuroscience ERP work -# because mastoids sit on bony prominence with less EMG and are far less -# contact-noise-prone than Fz on dry actives. Absolute P100 latency / -# amplitude differ slightly from the Fz-referenced waveform, so direct -# comparison to Fz-referenced clinical norms is approximate; differential -# biomarkers (IOLD, slope, asymmetry) are reference-invariant and remain -# directly comparable. Required (not optional) for Biomarker 12's Halliday -# Fz-inversion check, which needs Fz as a recorded channel rather than the -# reference. -# -# M1 is the Cyton hardware reference (SRB pin), so stored channel data is -# already relative to M1. A zero-valued M1 channel is synthesised and averaged -# with the recorded M2, giving Oz-(M1+M2)/2 after the algebra. -# - -REF_SCHEME = 'Fz (ISCEV)' # 'Fz (ISCEV)' or 'Linked Mastoid M1+M2' - -if REF_SCHEME == 'Fz (ISCEV)': - raw_ref = raw.copy() - if 'Fz' in raw_ref.ch_names: - # Fz is a recorded channel — subtract it as software reference - raw_ref.set_eeg_reference(ref_channels=['Fz']) - else: - # Fz is the hardware SRB — data already in Fz space, no software step needed - print("[ref] Fz is hardware reference — no software re-reference applied") -elif REF_SCHEME == 'Linked Mastoid M1+M2': - raw_ref = raw.copy() - if 'M1' not in raw_ref.ch_names: - # M1 is the SRB (hardware reference) — synthesise it as zero so the - # algebra (channel − M2/2) approximates linked mastoid - m1_zero = raw_ref.copy().pick(['M2']) - m1_zero._data[:] = 0 - m1_zero.rename_channels({'M2': 'M1'}) - raw_ref.add_channels([m1_zero]) - # M1 is a real recorded channel (session 016+) or the synthesised zero above - raw_ref.set_eeg_reference(ref_channels=['M1', 'M2']) -else: - raise ValueError(f'Unknown REF_SCHEME: {REF_SCHEME!r}') - -ref_label = REF_SCHEME -results = {'ref_label': ref_label} -print(f"\n{'='*60}\nReference: {ref_label}\n{'='*60}") - -raw_ref.compute_psd(fmin=hp, fmax=lp).plot() - -############################################################################### -# ## Epoching -# - -ch_epochs = Epochs(raw_ref, events=events, event_id=event_id, - tmin=-0.1, tmax=0.4, baseline=BASELINE, - reject={'eeg': REJECT_UV}, - preload=True, verbose=False, picks=ALL_PICK_CHANNELS, - event_repeated='drop') -ch_epochs.shift_time(-link_panel_lag) - -n_total = len(ch_epochs) -drop_pct = (1 - n_total / len(events)) * 100 -print(f"\n[{PICK_CH}] reject ptp={REJECT_UV * 1e6:.0f} uV " - f"kept {n_total}/{len(events)} ({drop_pct:.1f}% dropped)") -results['n_trials_total'] = int(len(events)) -results['n_trials_kept'] = int(n_total) -results['drop_pct'] = _f(drop_pct) -results['n_per_condition'] = { - cond: int((events[:, 2] == cid).sum()) for cond, cid in event_id.items() -} - -# Corrected-events epochs on the same kept trials. -ch_epochs_corr = Epochs(raw_ref, events=events_corrected[ch_epochs.selection], - event_id=event_id, tmin=-0.1, tmax=0.4, baseline=BASELINE, - reject=None, preload=True, verbose=False, picks=ALL_PICK_CHANNELS, - event_repeated='drop') -ch_epochs_corr.shift_time(-link_panel_lag) - -def avg_eyes(ep, eye_prefix): - keys = [k for k in event_id if k.startswith(eye_prefix)] - return trimmed_average(ep[keys]) if keys else None - -# ========================================================================= -# WAVEFORM PLOTS -# ========================================================================= - -"" -############################################################################### -# Stage 2 — Post-epoch baseline quality (filtered + referenced) -# Absolute values are meaningful here. Baseline window: -100 to 0 ms. -############################################################################### - -BASELINE_WIN = (-0.1, 0.0) -NOISE_FACTOR_EP = 1.5 # flag if channel baseline RMS > this × group median -OZ_SNR_MIN = 2.0 # flag if Oz P100 SNR falls below this - -baseline_mask = (ch_epochs_corr.times >= BASELINE_WIN[0]) & \ - (ch_epochs_corr.times <= BASELINE_WIN[1]) - -baseline_data = ch_epochs_corr.get_data()[:, :, baseline_mask] # (epochs, ch, times) -baseline_rms = np.sqrt(np.mean(baseline_data ** 2, axis=(0, 2))) * 1e6 # µV per channel - -ch_names_ep = ch_epochs_corr.ch_names -med_rms = float(np.median(baseline_rms)) - -print("Stage 2 — Baseline RMS per channel (post-filter, post-reference, -100–0 ms)") -print(f"{'Channel':<8} {'RMS µV':>8} {'Factor':>8} Status") -print("-" * 44) -quality_flags = {} -for ch, rms in zip(ch_names_ep, baseline_rms): - factor = rms / med_rms - flag = factor > NOISE_FACTOR_EP - quality_flags[ch] = {'rms_uv': round(float(rms), 2), 'flag': flag} - print(f"{ch:<8} {rms:>8.2f} {factor:>8.2f} {'⚑ FLAG' if flag else 'ok'}") - -# Oz SNR: best detected P100 / Oz baseline RMS -oz_idx = ch_names_ep.index('Oz') -oz_rms = baseline_rms[oz_idx] -print(f"\nOz baseline RMS = {oz_rms:.2f} µV group median = {med_rms:.2f} µV") - -flagged_chs = [ch for ch, v in quality_flags.items() if v['flag']] -if flagged_chs: - print(f"\n⚑ Noisy channels (>{NOISE_FACTOR_EP}× median): {flagged_chs}") - if len(flagged_chs) == len(ch_names_ep): - print(" All channels elevated → shared reference (M2/SRB) is likely the cause.") - else: - print(" Subset of channels → individual electrode contact issue(s).") -else: - print(f"\nAll channels within {NOISE_FACTOR_EP}× median baseline — contact quality ok.") - -############################################################################### -# ## Oz evoked: left vs right eye -# -# Solid lines: per-trial PC lag corrected. Dotted lines: mean-corrected baseline. -# Shaded regions: ±1 SEM across trials. -# - -evoked_left_large = trimmed_average(ch_epochs['left_eye/large']) -evoked_right_large = trimmed_average(ch_epochs['right_eye/large']) -evoked_left_small = trimmed_average(ch_epochs['left_eye/small']) -evoked_right_small = trimmed_average(ch_epochs['right_eye/small']) - -idx_oz = evoked_left_large.ch_names.index(PICK_CH) - -times = evoked_left_large.times * 1000 -left_data_large = evoked_left_large.data[idx_oz] * 1e6 -right_data_large = evoked_right_large.data[idx_oz] * 1e6 -left_data_small = evoked_left_small.data[idx_oz] * 1e6 -right_data_small = evoked_right_small.data[idx_oz] * 1e6 - -times_mean_corr = times - (pc_lag_s.mean() * 1000) - -evoked_left_corr_large = trimmed_average(ch_epochs_corr['left_eye/large']) -evoked_right_corr_large = trimmed_average(ch_epochs_corr['right_eye/large']) -left_corr_large = evoked_left_corr_large.data[idx_oz] * 1e6 -right_corr_large = evoked_right_corr_large.data[idx_oz] * 1e6 - -evoked_left_corr_small = trimmed_average(ch_epochs_corr['left_eye/small']) -evoked_right_corr_small = trimmed_average(ch_epochs_corr['right_eye/small']) -left_corr_small = evoked_left_corr_small.data[idx_oz] * 1e6 -right_corr_small = evoked_right_corr_small.data[idx_oz] * 1e6 - -left_trials_large = ch_epochs_corr['left_eye/large'].get_data(picks=[PICK_CH])[:, 0, :] * 1e6 -right_trials_large = ch_epochs_corr['right_eye/large'].get_data(picks=[PICK_CH])[:, 0, :] * 1e6 -left_sem_large = left_trials_large.std(axis=0) / np.sqrt(len(left_trials_large)) -right_sem_large = right_trials_large.std(axis=0) / np.sqrt(len(right_trials_large)) - -left_trials_small = ch_epochs_corr['left_eye/small'].get_data(picks=[PICK_CH])[:, 0, :] * 1e6 -right_trials_small = ch_epochs_corr['right_eye/small'].get_data(picks=[PICK_CH])[:, 0, :] * 1e6 -left_sem_small = left_trials_small.std(axis=0) / np.sqrt(len(left_trials_small)) -right_sem_small = right_trials_small.std(axis=0) / np.sqrt(len(right_trials_small)) - -# Size-averaged evokeds used as primary input for most biomarkers. -evoked_left_corr_avg = avg_eyes(ch_epochs_corr, 'left_eye') -evoked_right_corr_avg = avg_eyes(ch_epochs_corr, 'right_eye') -n75_left, p100_left, n145_left = get_pr_vep_latencies(evoked_left_corr_avg.copy().pick([PICK_CH])) -n75_right, p100_right, n145_right = get_pr_vep_latencies(evoked_right_corr_avg.copy().pick([PICK_CH])) - -for eye_name, peaks in [('Left Eye (Avg)', (n75_left, p100_left, n145_left)), - ('Right Eye (Avg)', (n75_right, p100_right, n145_right))]: - for peak in peaks: - if peak is not None: - print(f"[{eye_name}] {peak['name']} Peak: " - f"{round(peak['amplitude']*1e6, 2)} µV at " - f"{round(peak['latency']*1e3, 2)} ms (ch={peak['channel']})") - - n75, p100, n145 = peaks - if n75 is not None and p100 is not None: - ptp_1 = (p100['amplitude'] - n75['amplitude']) * 1e6 - print(f"[{eye_name}] N75-P100 Peak-to-Peak: {ptp_1:.2f} µV") - if p100 is not None and n145 is not None: - ptp_2 = (p100['amplitude'] - n145['amplitude']) * 1e6 - print(f"[{eye_name}] P100-N145 Peak-to-Peak: {ptp_2:.2f} µV") - if n75 is not None and p100 is not None and n145 is not None: - print(f"[{eye_name}] Total N75-P100-N145 Energy: {ptp_1 + ptp_2:.2f} µV") - -def plot_ch(ax, data, color, eye_label, sem=None, data_mean_corr=None, times_mean_corr=None): - ax.plot(times, data, color=color, linewidth=2, label=f'{eye_label} (Per-trial corrected)') - if data_mean_corr is not None and times_mean_corr is not None: - ax.plot(times_mean_corr, data_mean_corr, color=color, linestyle=':', alpha=0.6, - linewidth=1.6, label=f'{eye_label} (Mean corrected)') - if sem is not None: - ax.fill_between(times, data - sem, data + sem, color=color, alpha=0.25, - label=f'{eye_label} ±1 SEM') - ax.set_xlabel('Time (ms)') - ax.set_ylabel('Amplitude (µV)') - ax.grid(True, alpha=0.3) - ax.axhline(y=0, color='black', linestyle='-', alpha=0.3) - ax.axvline(x=0, color='black', linestyle='--', alpha=0.5) - -fig_large, (ax_left_large, ax_right_large) = plt.subplots(1, 2, figsize=(16, 6), sharey=True) - -plot_ch(ax_left_large, left_corr_large, 'blue', 'Left Eye', sem=left_sem_large, - data_mean_corr=left_data_large, times_mean_corr=times_mean_corr) -for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax_left_large.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) -ax_left_large.set_title(f'[{ref_label}] Large Checks: Left Eye — {PICK_CH}') -handles, lbls = ax_left_large.get_legend_handles_labels() -ax_left_large.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), - fontsize=10, loc='upper right') - -plot_ch(ax_right_large, right_corr_large, 'red', 'Right Eye', sem=right_sem_large, - data_mean_corr=right_data_large, times_mean_corr=times_mean_corr) -for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax_right_large.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) -ax_right_large.set_title(f'[{ref_label}] Large Checks: Right Eye — {PICK_CH}') -handles, lbls = ax_right_large.get_legend_handles_labels() -ax_right_large.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), - fontsize=10, loc='upper right') - -fig_large.tight_layout() -plt.show() - -############################################################################### -# ## Oz evoked: small checks -# - -fig_small, (ax_left_small, ax_right_small) = plt.subplots(1, 2, figsize=(16, 6), sharey=True) - -plot_ch(ax_left_small, left_corr_small, 'blue', 'Left Eye', sem=left_sem_small, - data_mean_corr=left_data_small, times_mean_corr=times_mean_corr) -for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax_left_small.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) -ax_left_small.set_title(f'[{ref_label}] Small Checks: Left Eye — {PICK_CH}') -handles, lbls = ax_left_small.get_legend_handles_labels() -ax_left_small.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), - fontsize=10, loc='upper right') - -plot_ch(ax_right_small, right_corr_small, 'red', 'Right Eye', sem=right_sem_small, - data_mean_corr=right_data_small, times_mean_corr=times_mean_corr) -for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax_right_small.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) -ax_right_small.set_title(f'[{ref_label}] Small Checks: Right Eye — {PICK_CH}') -handles, lbls = ax_right_small.get_legend_handles_labels() -ax_right_small.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), - fontsize=10, loc='upper right') - -fig_small.tight_layout() -plt.show() - -############################################################################### -# ## Occipital channel comparison (Oz, O1, O2) — size-averaged per eye -# -# O1/O2 alongside Oz on the same axes. Subject0000 has a larger right occipital -# lobe that crosses the midline. Due to paradoxical lateralization (right V1 -# dipole projects to left scalp), this predicts O1 > O2 amplitude as a -# baseline anatomical effect independent of pathology. Confirming this here -# separates the structural asymmetry from any eye-dependent lesion signal. -# - -fig_o1o2, axes_o1o2 = plt.subplots(1, 2, figsize=(16, 6), sharey=True) -occ_styles = { - 'Oz': dict(color='black', lw=2.5, ls='-', alpha=1.0), - 'O1': dict(color='#9467bd', lw=1.8, ls='--', alpha=0.85), - 'O2': dict(color='#e377c2', lw=1.8, ls='--', alpha=0.85), -} - -for ax, (eye_name, ev_avg) in zip(axes_o1o2, - [('Left Eye', evoked_left_corr_avg), - ('Right Eye', evoked_right_corr_avg)]): - if ev_avg is None: - continue - t_occ = ev_avg.times * 1000 - for ch, style in occ_styles.items(): - if ch not in ev_avg.ch_names: - continue - idx = ev_avg.ch_names.index(ch) - ax.plot(t_occ, ev_avg.data[idx] * 1e6, label=ch, **style) - - for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax.axvline(ms, color=col, linestyle='--', alpha=0.5, - label=lbl if ax == axes_o1o2[0] else '') - ax.set_title(f'[{ref_label}] Occipital channels — {eye_name} (size-averaged)') - ax.set_xlabel('Time (ms)') - ax.axhline(0, color='black', alpha=0.3) - ax.axvline(0, color='black', linestyle='--', alpha=0.5) - if ax == axes_o1o2[0]: - ax.set_ylabel('Amplitude (µV)') - ax.grid(True, alpha=0.3) - handles, lbls = ax.get_legend_handles_labels() - ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), - fontsize=10, loc='upper right') - -fig_o1o2.tight_layout() -plt.show() - -############################################################################### -# ## Inter-ocular difference wave at Oz -# -# The full time course of the L−R contrast. Surfaces morphology effects that -# single-point biomarkers miss: delayed second peaks on the affected eye, -# split / W-shaped P100 from partially demyelinated fibres, broadening of -# the P100. Zero baseline = eyes match; sign convention follows IOLD (positive -# = left-eye delay near the P100 peak). -# - -fig_diff, (ax_diff_large, ax_diff_small) = plt.subplots(1, 2, figsize=(16, 6), sharey=True) - -for ax, size_label, l_data, r_data in [ - (ax_diff_large, 'Large', left_corr_large, right_corr_large), - (ax_diff_small, 'Small', left_corr_small, right_corr_small), -]: - diff = l_data - r_data - ax.plot(times, l_data, color='blue', alpha=0.25, linewidth=1.2, label='Left Eye') - ax.plot(times, r_data, color='red', alpha=0.25, linewidth=1.2, label='Right Eye') - ax.plot(times, diff, color='#7d3c98', linewidth=2.5, label='L − R difference') - ax.fill_between(times, 0, diff, color='#7d3c98', alpha=0.15) - - for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax.axvline(x=ms, color=col, linestyle='--', alpha=0.6, label=lbl) - - ax.set_title(f'[{ref_label}] {size_label} Checks: L − R Difference Wave — {PICK_CH}') - ax.set_xlabel('Time (ms)') - ax.set_ylabel('Amplitude (µV)') - ax.grid(True, alpha=0.3) - ax.axhline(0, color='black', alpha=0.3) - ax.axvline(0, color='black', linestyle='--', alpha=0.5) - handles, lbls = ax.get_legend_handles_labels() - ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), - fontsize=10, loc='upper right') - -fig_diff.tight_layout() -plt.show() - -############################################################################### -# ## Diagnostic: jitter-correction impact -# -# Compares the P100 sharpness with and without per-trial PC lag correction. -# - -evoked_left_uncorr = avg_eyes(ch_epochs, 'left_eye') -evoked_right_uncorr = avg_eyes(ch_epochs, 'right_eye') - -if all(x is not None for x in [evoked_left_corr_avg, evoked_right_corr_avg, - evoked_left_uncorr, evoked_right_uncorr]): - fig_jitter, axes_j = plt.subplots(1, 2, figsize=(16, 6), sharey=True) - - for ax, eye_name, ev_u, ev_c, color in zip( - axes_j, ['Left Eye', 'Right Eye'], - [evoked_left_uncorr, evoked_right_uncorr], - [evoked_left_corr_avg, evoked_right_corr_avg], - ['blue', 'red'] - ): - t_u = ev_u.times * 1000 - t_c = ev_c.times * 1000 - i_oz = ev_u.ch_names.index(PICK_CH) - - ax.plot(t_u, ev_u.data[i_oz] * 1e6, color='gray', linestyle='--', linewidth=2, - label='Uncorrected') - ax.plot(t_c, ev_c.data[i_oz] * 1e6, color=color, linewidth=2, - label='PC-lag corrected') - - for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax.axvline(x=ms, color=col, linestyle=':', alpha=0.5, - label=lbl if ax == axes_j[0] else '') - - ax.set_title(f'[{ref_label}] {eye_name}: Jitter Correction Impact — {PICK_CH}') - ax.set_xlabel('Time (ms)') - if ax == axes_j[0]: - ax.set_ylabel('Amplitude (µV)') - ax.axhline(0, color='black', alpha=0.3) - ax.axvline(0, color='black', linestyle='--', alpha=0.5) - handles, lbls = ax.get_legend_handles_labels() - ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), - loc='upper right') - - fig_jitter.tight_layout() - plt.show() - -############################################################################### -# ## Diagnostic: estimator robustness -# -# Overlays single trials to reveal outlier contamination (e.g., blinks), then -# compares standard mean, median, and 10%-trimmed mean estimators. -# - -fig_est, axes_e = plt.subplots(1, 2, figsize=(16, 6), sharey=True) - -for ax, eye_prefix, color in zip(axes_e, ['left_eye', 'right_eye'], ['blue', 'red']): - keys = [k for k in event_id if k.startswith(eye_prefix)] - if not keys: - continue - - ep = ch_epochs_corr[keys].copy().pick([PICK_CH]) - data = ep.get_data() * 1e6 - if data.shape[0] == 0: - continue - - data = data[:, 0, :] - times_e = ep.times * 1000 - - subset = data[:100] if data.shape[0] > 100 else data - for trial in subset: - ax.plot(times_e, trial, color='gray', alpha=0.08, linewidth=0.5) - - ax.plot(times_e, np.mean(data, axis=0), color='orange', linestyle='--', - linewidth=2, label='Standard mean') - ax.plot(times_e, np.median(data, axis=0), color='green', linestyle='-.', - linewidth=2, label='Median') - ax.plot(times_e, trim_mean(data, 0.1, axis=0), color=color, - linewidth=3, label='10% Trimmed mean') - - for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax.axvline(x=ms, color=col, linestyle=':', alpha=0.5, - label=lbl if ax == axes_e[0] else '') - - ax.set_title(f'[{ref_label}] {eye_prefix.replace("_", " ").title()}: ' - f'Single Trials & Estimators — {PICK_CH}') - ax.set_xlabel('Time (ms)') - if ax == axes_e[0]: - ax.set_ylabel('Amplitude (µV)') - ax.set_ylim(-30, 30) - ax.axhline(0, color='black', alpha=0.3) - ax.axvline(0, color='black', linestyle='--', alpha=0.5) - handles, lbls = ax.get_legend_handles_labels() - ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), - loc='upper right') - -fig_est.tight_layout() -plt.show() - -############################################################################### -# ## Diagnostic: multi-channel topography -# -# Displays the trimmed-mean waveform across all posterior channels to confirm -# the Oz > O1/O2 > Pz generator gradient expected from a V1 source. -# - -fig_mc, axes_mc = plt.subplots(1, 2, figsize=(16, 6), sharey=True) - -plot_channels = [ch for ch in ['Oz', 'O1', 'O2', 'P7', 'P8', 'Pz'] - if ch in ch_epochs_corr.ch_names] -ch_colors = {'Oz': 'black', 'O1': '#9467bd', 'O2': '#e377c2', - 'P7': '#1f77b4', 'P8': '#d62728', 'Pz': '#2ca02c'} - -for ax, eye_name, ev_avg in zip(axes_mc, ['Left Eye', 'Right Eye'], - [evoked_left_corr_avg, evoked_right_corr_avg]): - if ev_avg is None: - continue - - t_mc = ev_avg.times * 1000 - for ch in plot_channels: - idx = ev_avg.ch_names.index(ch) - lw = 3 if ch == 'Oz' else 1.5 - alpha = 1.0 if ch == 'Oz' else 0.7 - ax.plot(t_mc, ev_avg.data[idx] * 1e6, - color=ch_colors.get(ch, 'gray'), linewidth=lw, alpha=alpha, label=ch) - - for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax.axvline(x=ms, color=col, linestyle=':', alpha=0.5, - label=lbl if ax == axes_mc[0] else '') - - ax.set_title(f'[{ref_label}] {eye_name}: Multi-Channel Topography') - ax.set_xlabel('Time (ms)') - if ax == axes_mc[0]: - ax.set_ylabel('Amplitude (µV)') - ax.axhline(0, color='black', alpha=0.3) - ax.axvline(0, color='black', linestyle='--', alpha=0.5) - handles, lbls = ax.get_legend_handles_labels() - ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), - loc='upper right') - -fig_mc.tight_layout() -plt.show() - -# ========================================================================= -# SECTION 1: Pre-chiasmatic / Optic Nerve Biomarkers -# -# BM1–BM5 all measure the L−R optic-nerve contrast at Oz. Because both eyes -# share the same Quest → Cyton signal chain the unmeasured residual lags -# cancel in every L−R difference, making these biomarkers robust to the -# absolute timing uncertainty in this setup. -# ========================================================================= -print("\n" + "="*70) -print("SECTION 1 — Pre-chiasmatic / Optic Nerve") -print("="*70) - -############################################################################### -# ## BM1 — IOLD: inter-ocular P100 latency difference (pooled) -# -# The signed L−R difference in P100 latency at Oz (size-averaged evoked). -# > 6–8 ms is the most-cited clinical threshold for unilateral demyelination. -# - -results['iold'] = compute_iold(p100_left, p100_right) - -print("\n--- BM1: IOLD (pooled) ---") -if results['iold'] is None: - print("[BM1] Cannot compute — P100 not detected in one or both eyes") -else: - d = results['iold'] - direction = "left delayed" if d['iold_ms'] > 0 else "right delayed" - status = 'FLAG' if d['flag'] else f'within ±{IOLD_FLAG_MS:.0f} ms' - print(f"[BM1] P100 Left = {d['p100_left_ms']:.2f} ms Right = {d['p100_right_ms']:.2f} ms") - print(f"[BM1] IOLD L−R = {d['iold_ms']:+.2f} ms ({direction}) [{status}]") - - fig_bm1, ax_bm1 = plt.subplots(figsize=(6, 5)) - bar_vals = [d['p100_left_ms'], d['p100_right_ms']] - bars = ax_bm1.bar([0, 1], bar_vals, color=['#1f77b4', '#d62728'], alpha=0.75, width=0.45) - y_top = max(bar_vals) + 5 - ax_bm1.annotate('', xy=(1, y_top), xytext=(0, y_top), - arrowprops=dict(arrowstyle='<->', color='#7d3c98', lw=2)) - flag_marker = ' ⚑ FLAG' if d['flag'] else '' - ax_bm1.text(0.5, y_top + 1.5, f'IOLD = {d["iold_ms"]:+.1f} ms{flag_marker}', - ha='center', va='bottom', color='#7d3c98', fontsize=11, fontweight='bold') - # shade the ±threshold band around right-eye bar to give visual reference - ref = d['p100_right_ms'] - ax_bm1.axhspan(ref - IOLD_FLAG_MS, ref + IOLD_FLAG_MS, - alpha=0.10, color='orange', label=f'±{IOLD_FLAG_MS:.0f} ms threshold band') - ax_bm1.set_xticks([0, 1]) - ax_bm1.set_xticklabels(['Left Eye', 'Right Eye'], fontsize=12) - ax_bm1.set_ylabel('P100 latency at Oz (ms)') - ax_bm1.set_title(f'[{ref_label}] BM1: IOLD — inter-ocular P100 latency') - ax_bm1.set_ylim(0, y_top + 8) - ax_bm1.legend(fontsize=9) - ax_bm1.grid(axis='y', alpha=0.3) - fig_bm1.tight_layout() - plt.show() - -############################################################################### -# ## BM2 — IOLD per check size -# -# Demyelination preferentially delays high-spatial-frequency (small-check) -# responses, so the per-size IOLD often surfaces lateralised dysfunction that -# the size-pooled IOLD averages out. -# - -results['iold_per_size'] = compute_iold_per_size(ch_epochs_corr, event_id, PICK_CH) - -print("\n--- BM2: IOLD per check size ---") -for size, d in results['iold_per_size'].items(): - if d is None: - print(f"[BM2/{size}] Cannot compute — P100 not detected at one or both eyes") - continue - direction = "left delayed" if d['iold_ms'] > 0 else "right delayed" - status = 'FLAG' if d['flag'] else f'within ±{IOLD_FLAG_MS:.0f} ms' - print(f"[BM2/{size}] P100 Left = {d['p100_left_ms']:.2f} ms Right = {d['p100_right_ms']:.2f} ms") - print(f"[BM2/{size}] IOLD L−R = {d['iold_ms']:+.2f} ms ({direction}) [{status}]") - -# Grouped bar: L/R per check size -sizes_present = [s for s, d in results['iold_per_size'].items() if d is not None] -if sizes_present: - fig_bm2, ax_bm2 = plt.subplots(figsize=(8, 5)) - x2 = np.arange(len(sizes_present)) - w2 = 0.32 - for i, (eye_prefix, color, eye_label) in enumerate( - [('left', '#1f77b4', 'Left Eye'), ('right', '#d62728', 'Right Eye')]): - lats = [results['iold_per_size'][s][f'p100_{eye_prefix}_ms'] for s in sizes_present] - ax_bm2.bar(x2 + (i - 0.5) * w2, lats, w2, color=color, alpha=0.75, label=eye_label) - - for j, size in enumerate(sizes_present): - d = results['iold_per_size'][size] - if d and d.get('iold_ms') is not None: - flag_str = ' ⚑' if d['flag'] else '' - top = max(d['p100_left_ms'], d['p100_right_ms']) - ax_bm2.text(j, top + 1.5, f'IOLD\n{d["iold_ms"]:+.1f}ms{flag_str}', - ha='center', fontsize=9, color='#7d3c98', fontweight='bold') - - ax_bm2.set_xticks(x2) - ax_bm2.set_xticklabels([f'{s.title()} checks\n({CHECK_SIZE_ARCMIN[s]:.0f} arcmin)' - for s in sizes_present], fontsize=11) - ax_bm2.set_ylabel('P100 latency at Oz (ms)') - ax_bm2.set_title(f'[{ref_label}] BM2: IOLD per check size') - ax_bm2.legend() - ax_bm2.grid(axis='y', alpha=0.3) - fig_bm2.tight_layout() - plt.show() - -############################################################################### -# ## BM3 — Check-size slope -# -# Per-eye P100 latency slope vs. check size (ms / arcmin). Demyelination -# preferentially delays high-spatial-frequency (small-check) responses, so the -# L−R slope difference amplifies asymmetric demyelination beyond what a -# single-check IOLD captures. -# -# Check-size mapping: -# large → 1.0 deg = 60 arcmin (ISCEV "large check") -# small → 0.25 deg = 15 arcmin (ISCEV "small check") -# - -results['slope'] = compute_check_size_slope( - ch_epochs_corr, event_id, PICK_CH, CHECK_SIZE_ARCMIN, -) -s = results['slope'] - -print("\n--- BM3: Check-size slope ---") -for cond_key, lat_ms in s['per_condition_p100_ms'].items(): - print(f"[BM3] {cond_key}: P100 = {lat_ms:.2f} ms") -if s['slope_left_ms_per_arcmin'] is not None: - print(f"[BM3] Left eye slope: {s['slope_left_ms_per_arcmin']:+.4f} ms/arcmin") -if s['slope_right_ms_per_arcmin'] is not None: - print(f"[BM3] Right eye slope: {s['slope_right_ms_per_arcmin']:+.4f} ms/arcmin") -if s['slope_diff'] is not None: - print(f"[BM3] Slope diff L−R: {s['slope_diff']:+.4f} ms/arcmin " - f"(positive = left more SF-dependent = left more affected)") -elif not s['per_condition_p100_ms']: - print("[BM3] Insufficient per-condition P100 detections for slope estimation") -else: - print("[BM3] Need both eyes detected for slope difference") - -# Scatter + regression lines -if s['per_condition_p100_ms']: - fig_bm3, ax_bm3 = plt.subplots(figsize=(7, 5)) - for eye_prefix, color, eye_label, slope_key in [ - ('left_eye', '#1f77b4', 'Left Eye', 'slope_left_ms_per_arcmin'), - ('right_eye', '#d62728', 'Right Eye', 'slope_right_ms_per_arcmin'), - ]: - pts = [] - for cond_key, lat_ms in s['per_condition_p100_ms'].items(): - if cond_key.startswith(eye_prefix) and lat_ms is not None: - size_label = cond_key.split('/')[1] - if size_label in CHECK_SIZE_ARCMIN: - pts.append((CHECK_SIZE_ARCMIN[size_label], lat_ms)) - if not pts: - continue - pts.sort() - xs_p, ys_p = zip(*pts) - ax_bm3.scatter(xs_p, ys_p, color=color, s=100, zorder=5) - - slope_val = s.get(slope_key) - if slope_val is not None and len(pts) >= 2: - intercept = np.mean(ys_p) - slope_val * np.mean(xs_p) - x_fit = np.linspace(min(xs_p) - 5, max(xs_p) + 5, 80) - ax_bm3.plot(x_fit, slope_val * x_fit + intercept, color=color, lw=2, - label=f'{eye_label}: {slope_val:+.3f} ms/arcmin') - else: - ax_bm3.plot(xs_p, ys_p, color=color, lw=1.5, label=eye_label) - - if s['slope_diff'] is not None: - ax_bm3.annotate(f'Slope diff L−R = {s["slope_diff"]:+.3f} ms/arcmin', - xy=(0.05, 0.95), xycoords='axes fraction', - ha='left', va='top', fontsize=10, color='#7d3c98', - fontweight='bold') - ax_bm3.set_xlabel('Check size (arcmin)') - ax_bm3.set_ylabel('P100 latency at Oz (ms)') - ax_bm3.set_title(f'[{ref_label}] BM3: P100 latency vs check size (slope)') - ax_bm3.legend() - ax_bm3.grid(True, alpha=0.3) - fig_bm3.tight_layout() - plt.show() - -############################################################################### -# ## BM4 — P100 amplitude ratio L/R -# -# Inter-ocular amplitude ratio at P100. Less specific than latency but -# computed for free from the same recordings. |log2(L/R)| > 1 (ratio outside -# ~0.5–2.0) flags attenuated drive on the lower-amplitude side. -# -# Caveat: amplitude is sensitive to electrode contact / pulse artifact / -# subject alertness. Treat amplitude ratios as supportive evidence rather than -# standalone biomarkers until several clean baseline sessions bracket the -# day-to-day variance. -# - -results['amplitude'] = compute_amplitude_ratio(p100_left, p100_right) - -print("\n--- BM4: Amplitude ratio L/R ---") -if results['amplitude'] is None: - if p100_left is None or p100_right is None: - print("[BM4] Cannot compute — P100 not detected in one or both eyes") - else: - print("[BM4] Right-eye P100 amplitude is zero; ratio undefined") -else: - a = results['amplitude'] - status = 'FLAG' if a['flag'] else 'within ±1 log₂' - print(f"[BM4] P100 amplitude Left = {a['amp_left_uv']:.2f} µV") - print(f"[BM4] P100 amplitude Right = {a['amp_right_uv']:.2f} µV") - print(f"[BM4] L/R ratio = {a['ratio']:.2f} (log₂ = {a['log2_ratio']:+.2f}) [{status}]") - - fig_bm4, ax_bm4 = plt.subplots(figsize=(6, 5)) - ax_bm4.bar([0, 1], [a['amp_left_uv'], a['amp_right_uv']], - color=['#1f77b4', '#d62728'], alpha=0.75, width=0.45) - ax_bm4.set_xticks([0, 1]) - ax_bm4.set_xticklabels(['Left Eye', 'Right Eye'], fontsize=12) - ax_bm4.set_ylabel('P100 amplitude at Oz (µV)') - flag_marker = ' ⚑ FLAG' if a['flag'] else '' - ax_bm4.set_title(f'[{ref_label}] BM4: P100 amplitude L/R\n' - f'ratio = {a["ratio"]:.2f} (log₂ = {a["log2_ratio"]:+.2f}){flag_marker}') - ax_bm4.grid(axis='y', alpha=0.3) - fig_bm4.tight_layout() - plt.show() - -############################################################################### -# ## BM5 — Bootstrap P100 / IOLD confidence intervals -# -# The 8 ms IOLD threshold is only meaningful relative to the precision of -# the L and R latency estimates. A 7 ms IOLD with ±2 ms CI is clinically -# suspicious; a 7 ms IOLD with ±5 ms CI is noise. -# -# Trial-resamples with replacement, recomputes the trimmed-mean evoked at -# PICK_CH, locates the positive peak in the P100 search window. The IOLD CI -# uses pairwise differences of two independent bootstrap samples. -# - -N_BOOT = 1000 -BOOT_SEED = 0 - -boot_left = bootstrap_p100_latency( - ch_epochs_corr, event_id, PICK_CH, 'left_eye', - win_ms=P100_WIN_MS, n_boot=N_BOOT, seed=BOOT_SEED, -) -boot_right = bootstrap_p100_latency( - ch_epochs_corr, event_id, PICK_CH, 'right_eye', - win_ms=P100_WIN_MS, n_boot=N_BOOT, seed=BOOT_SEED + 1, -) - -print("\n--- BM5: Bootstrap P100 / IOLD confidence intervals ---") - -if boot_left is not None and boot_right is not None: - l_med, l_lo, l_hi = (np.percentile(boot_left, 50), - np.percentile(boot_left, 2.5), - np.percentile(boot_left, 97.5)) - r_med, r_lo, r_hi = (np.percentile(boot_right, 50), - np.percentile(boot_right, 2.5), - np.percentile(boot_right, 97.5)) - diffs = boot_left - boot_right - d_med, d_lo, d_hi = (np.percentile(diffs, 50), - np.percentile(diffs, 2.5), - np.percentile(diffs, 97.5)) - excludes_zero = (d_lo > 0) or (d_hi < 0) - excl_8ms = (d_lo > 8.0) or (d_hi < -8.0) - print(f"[BM5] Left P100 median = {l_med:.2f} ms 95% CI = [{l_lo:.2f}, {l_hi:.2f}] " - f"(±{(l_hi-l_lo)/2:.2f} ms)") - print(f"[BM5] Right P100 median = {r_med:.2f} ms 95% CI = [{r_lo:.2f}, {r_hi:.2f}] " - f"(±{(r_hi-r_lo)/2:.2f} ms)") - print(f"[BM5] IOLD (L−R) median = {d_med:+.2f} ms 95% CI = [{d_lo:+.2f}, {d_hi:+.2f}]") - print(f"[BM5] {'CI excludes 0 — significant' if excludes_zero else 'CI includes 0 — not separable'}") - print(f"[BM5] {'CI excludes ±8 ms — clinically meaningful' if excl_8ms else 'CI overlaps ±8 ms — borderline'}") - - results['bootstrap'] = { - 'n_boot': int(N_BOOT), - 'win_ms': list(P100_WIN_MS), - 'left_p100_median_ms': _f(l_med), - 'left_p100_ci_lo_ms': _f(l_lo), - 'left_p100_ci_hi_ms': _f(l_hi), - 'right_p100_median_ms': _f(r_med), - 'right_p100_ci_lo_ms': _f(r_lo), - 'right_p100_ci_hi_ms': _f(r_hi), - 'iold_median_ms': _f(d_med), - 'iold_ci_lo_ms': _f(d_lo), - 'iold_ci_hi_ms': _f(d_hi), - 'iold_excludes_zero': bool(excludes_zero), - 'iold_excludes_8ms': bool(excl_8ms), - } - - # Bootstrap latency distribution - fig_bm5, ax_bm5 = plt.subplots(figsize=(10, 5)) - bins5 = np.arange(P100_WIN_MS[0], P100_WIN_MS[1] + 4, 4) - ax_bm5.hist(boot_left, bins=bins5, alpha=0.5, color='#1f77b4', - label=f'Left ({l_med:.1f} ms, 95% CI [{l_lo:.1f}, {l_hi:.1f}])') - ax_bm5.hist(boot_right, bins=bins5, alpha=0.5, color='#d62728', - label=f'Right ({r_med:.1f} ms, 95% CI [{r_lo:.1f}, {r_hi:.1f}])') - ax_bm5.axvline(l_med, color='#1f77b4', linestyle='--', alpha=0.8) - ax_bm5.axvline(r_med, color='#d62728', linestyle='--', alpha=0.8) - ax_bm5.axvspan(l_lo, l_hi, alpha=0.10, color='#1f77b4') - ax_bm5.axvspan(r_lo, r_hi, alpha=0.10, color='#d62728') - flag_str5 = ' ⚑ CI excludes 0' if excludes_zero else ' CI includes 0' - ax_bm5.set_xlabel('P100 latency (ms)') - ax_bm5.set_ylabel(f'Bootstrap count (N={N_BOOT})') - ax_bm5.set_title(f'[{ref_label}] BM5: Bootstrap P100 distribution — {PICK_CH}\n' - f'IOLD = {d_med:+.2f} ms 95% CI [{d_lo:+.2f}, {d_hi:+.2f}]{flag_str5}') - ax_bm5.legend(loc='upper right') - ax_bm5.grid(True, alpha=0.3) - fig_bm5.tight_layout() - plt.show() -else: - print("[BM5] Insufficient trials in one or both eyes — skipping") - results['bootstrap'] = None - -# ========================================================================= -# SECTION 2: Morphological Indicators -# -# BM6 examines the shape of the P100 itself rather than its latency or -# amplitude, targeting waveform distortions that can accompany partial -# demyelination or multifocal lesions. -# ========================================================================= -print("\n" + "="*70) -print("SECTION 2 — Morphological") -print("="*70) - -############################################################################### -# ## BM6 — W-peak (bifurcated P100) -# -# Partial demyelination or multifocal lesions can split the P100 into two -# distinct peaks (a "W" shape), reflecting asynchronous arrival of fast and -# slow fibre populations. The search window is 80–130 ms; two peaks are flagged -# when each rises > 1 µV above the dip between them. -# - -print("\n--- BM6: W-peak (bifurcated P100) ---") - -wpeak_results = {} -for eye_name, ev_data in [('Left Eye', evoked_left_corr_avg), - ('Right Eye', evoked_right_corr_avg)]: - if ev_data is None: - continue - oz_idx = ev_data.ch_names.index(PICK_CH) - t_ms = ev_data.times * 1000 - oz_uv = ev_data.data[oz_idx] * 1e6 - - w_mask = (t_ms >= 80) & (t_ms <= 130) - oz_win = oz_uv[w_mask] - t_win = t_ms[w_mask] - peaks_w, _ = find_peaks(oz_win, prominence=0.5, distance=3) - - flagged = False - if len(peaks_w) >= 2: - p1_t, p2_t = t_win[peaks_w[0]], t_win[peaks_w[1]] - p1_v, p2_v = oz_win[peaks_w[0]], oz_win[peaks_w[1]] - dip_v = float(np.min(oz_win[peaks_w[0]:peaks_w[1] + 1])) - if p1_v - dip_v > 1.0 and p2_v - dip_v > 1.0: - flagged = True - print(f"[BM6 {eye_name}] FLAG: W-peak detected on {PICK_CH}") - print(f" Peak 1: {p1_v:.2f} µV at {p1_t:.1f} ms") - print(f" Peak 2: {p2_v:.2f} µV at {p2_t:.1f} ms") - print(f" Dip: {dip_v:.2f} µV (depths: P1−dip={p1_v-dip_v:.2f}, P2−dip={p2_v-dip_v:.2f})") - wpeak_results[eye_name] = {'flagged': True, 'p1_ms': _f(p1_t), 'p2_ms': _f(p2_t), - 'p1_uv': _f(p1_v), 'p2_uv': _f(p2_v), 'dip_uv': _f(dip_v)} - if not flagged: - print(f"[BM6 {eye_name}] Normal single P100 morphology") - wpeak_results[eye_name] = {'flagged': False} - -results['wpeak'] = wpeak_results - -# Waveform plot with peak annotations -fig_bm6, axes_bm6 = plt.subplots(1, 2, figsize=(14, 5), sharey=True) -for ax, (eye_name, ev_data) in zip(axes_bm6, - [('Left Eye', evoked_left_corr_avg), - ('Right Eye', evoked_right_corr_avg)]): - if ev_data is None: - continue - oz_idx = ev_data.ch_names.index(PICK_CH) - t_ms = ev_data.times * 1000 - oz_uv = ev_data.data[oz_idx] * 1e6 - - ax.plot(t_ms, oz_uv, color='black', lw=2, label=PICK_CH) - ax.axvspan(80, 130, alpha=0.07, color='green', label='W-peak search (80–130 ms)') - - # Annotate detected peaks in search window - w_mask = (t_ms >= 80) & (t_ms <= 130) - oz_win = oz_uv[w_mask] - t_win = t_ms[w_mask] - peaks_w, _ = find_peaks(oz_win, prominence=0.5, distance=3) - for pi, pk in enumerate(peaks_w[:3]): - ax.annotate(f'P{pi+1}: {oz_win[pk]:.1f} µV\n@ {t_win[pk]:.0f} ms', - xy=(t_win[pk], oz_win[pk]), - xytext=(t_win[pk] + 8, oz_win[pk] + 1.5), - arrowprops=dict(arrowstyle='->', color='green', lw=1.2), - fontsize=8, color='green') - - for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax.axvline(ms, color=col, linestyle='--', alpha=0.5, label=lbl) - - wres = wpeak_results.get(eye_name, {}) - flag_title = ' ⚑ W-PEAK FLAGGED' if wres.get('flagged') else '' - ax.set_title(f'[{ref_label}] BM6: W-peak — {eye_name}{flag_title}') - ax.set_xlabel('Time (ms)') - ax.axhline(0, color='black', alpha=0.3) - ax.axvline(0, color='black', linestyle='--', alpha=0.5) - if ax == axes_bm6[0]: - ax.set_ylabel('Amplitude (µV)') - handles, lbls = ax.get_legend_handles_labels() - ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), - fontsize=9, loc='upper right') - -fig_bm6.tight_layout() -plt.show() - -# ========================================================================= -# SECTION 3: Post-chiasmatic / Cortical Biomarkers -# -# BM7–BM12 examine how the VEP distributes across scalp channels, targeting -# post-chiasmatic asymmetries and generator-confirmation checks. -# -# Hemisphere note: due to V1 anatomy (calcarine cortex folded into the -# longitudinal fissure), the P100 dipole projects PARADOXICALLY — right -# hemisphere V1 → left scalp (O1), left hemisphere V1 → right scalp (O2). -# P7/P8 (lateral extrastriate) project more directly ipsilaterally and are -# therefore less ambiguous for cortical-side lateralization. -# ========================================================================= -print("\n" + "="*70) -print("SECTION 3 — Post-chiasmatic / Cortical") -print("="*70) - -############################################################################### -# ## BM7 — Hemispheric asymmetry (O1 vs O2) -# -# Compares P100 latency and amplitude between left (O1) and right (O2) -# occipital channels. A post-chiasmatic lesion typically produces a "crossed -# asymmetry": the P100 is delayed or attenuated over the ipsilateral scalp -# (paradoxical lateralization) regardless of which eye is stimulated. -# -# **Paradoxical lateralization**: deficit at O1 → RIGHT hemisphere lesion; -# deficit at O2 → LEFT hemisphere lesion. -# - -print("\n--- BM7: Hemispheric asymmetry O1/O2 ---") - -fig_bm7, axes_bm7 = plt.subplots(1, 2, figsize=(16, 6), sharey=True) -hemi_per_eye = {} - -for ax, (eye_name, ev_avg) in zip(axes_bm7, - [('Left Eye', evoked_left_corr_avg), - ('Right Eye', evoked_right_corr_avg)]): - if ev_avg is None: - continue - - h = compute_hemi_asymmetry(ev_avg, 'O1', 'O2') - if h is not None: - lat_status = 'FLAG' if h['lat_flag'] else f'within ±{IOLD_FLAG_MS:.0f} ms' - amp_status = 'FLAG' if h['amp_flag'] else 'within ±1 log₂' - print(f"[BM7 {eye_name}] Latency: O1 = {h['lat_o1']:.2f} ms, O2 = {h['lat_o2']:.2f} ms " - f"(O1−O2 = {h['lat_diff_ms']:+.2f} ms [{lat_status}])") - print(f"[BM7 {eye_name}] Amplitude: O1 = {h['amp_o1']:.2f} µV, O2 = {h['amp_o2']:.2f} µV " - f"(O1/O2 = {h['amp_ratio']:.2f} [{amp_status}])") - hemi_per_eye[eye_name] = h - else: - ev_o1 = ev_avg.copy().pick(['O1']) - ev_o2 = ev_avg.copy().pick(['O2']) - _, p100_o1, _ = get_pr_vep_latencies(ev_o1) - _, p100_o2, _ = get_pr_vep_latencies(ev_o2) - if p100_o1 is not None or p100_o2 is not None: - detected = 'O1' if p100_o1 is not None else 'O2' - missing = 'O2' if p100_o1 is not None else 'O1' - print(f"[BM7 {eye_name}] FLAG: P100 at {detected} but absent at {missing}") - else: - print(f"[BM7 {eye_name}] P100 not detected in either O1 or O2") - - # Waveform - t_h = ev_avg.times * 1000 - for ch, color in [('O1', '#9467bd'), ('O2', '#e377c2')]: - if ch in ev_avg.ch_names: - idx = ev_avg.ch_names.index(ch) - ax.plot(t_h, ev_avg.data[idx] * 1e6, color=color, lw=2, label=ch) - for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax.axvline(ms, color=col, linestyle='--', alpha=0.6, - label=lbl if ax == axes_bm7[0] else '') - ax.set_title(f'[{ref_label}] BM7: Hemispheric asymmetry — {eye_name}') - ax.set_xlabel('Time (ms)') - ax.axhline(0, color='black', alpha=0.3) - ax.axvline(0, color='black', linestyle='--', alpha=0.5) - if ax == axes_bm7[0]: - ax.set_ylabel('Amplitude (µV)') - ax.legend(loc='upper right') - -fig_bm7.tight_layout() -plt.show() - -results['hemi_o1o2'] = dict(hemi_per_eye) - -############################################################################### -# ## BM8 — Inter-ocular Δ-asymmetry (O1 vs O2) -# -# Per-eye O1/O2 differences conflate the lesion signal with stable anatomical -# and electrode-stationary asymmetries (skull thickness, calcarine fold, etc.). -# Subtracting one eye's asymmetry from the other's cancels those stationary -# contributions: -# -# Δlat = (O1−O2)|left_eye − (O1−O2)|right_eye -# Δlog₂ = log₂(O1/O2)|left_eye − log₂(O1/O2)|right_eye -# -# ≈ 0 → purely anatomical / electrode-stationary. -# Large value → eye-dependent skew: the asymmetry depends on which eye drives -# cortex, implying a pathway signal rather than a scalp constant. -# - -results['hemi_delta_o1o2'] = compute_hemi_delta_asymmetry( - hemi_per_eye.get('Left Eye'), hemi_per_eye.get('Right Eye'), 'O1', 'O2', -) - -print("\n--- BM8: Inter-ocular Δ-asymmetry O1/O2 ---") -if results['hemi_delta_o1o2'] is None: - print("[BM8] Need P100 at both O1 and O2 in both eyes — skipping") -else: - d8 = results['hemi_delta_o1o2'] - print(f"[BM8] (O1−O2) latency: L-eye = {d8['lat_asym_left']:+.2f} ms, " - f"R-eye = {d8['lat_asym_right']:+.2f} ms") - print(f"[BM8] Δlat = {d8['d_lat']:+.2f} ms " - f"(≈0 ⇒ anatomical; large ⇒ eye-dependent)") - print(f"[BM8] log₂(O1/O2): L-eye = {d8['log2_asym_left']:+.2f}, " - f"R-eye = {d8['log2_asym_right']:+.2f}") - print(f"[BM8] Δlog₂ = {d8['d_log2']:+.2f} " - f"(≈0 ⇒ anatomical; large ⇒ eye-dependent)") - - fig_bm8, axes_bm8 = plt.subplots(1, 2, figsize=(10, 5)) - - # Latency asymmetry per eye drive - ax = axes_bm8[0] - lat_vals = [d8['lat_asym_left'] or 0, d8['lat_asym_right'] or 0] - ax.bar(['Left Eye\ndrive', 'Right Eye\ndrive'], lat_vals, - color=['#1f77b4', '#d62728'], alpha=0.75) - ax.axhline(0, color='black', lw=1) - ax.set_ylabel('O1 − O2 latency asymmetry (ms)') - ax.set_title(f'Δlat = {d8["d_lat"]:+.2f} ms') - ax.grid(axis='y', alpha=0.3) - - # Amplitude asymmetry per eye drive - ax = axes_bm8[1] - log2_vals = [d8['log2_asym_left'] or 0, d8['log2_asym_right'] or 0] - ax.bar(['Left Eye\ndrive', 'Right Eye\ndrive'], log2_vals, - color=['#1f77b4', '#d62728'], alpha=0.75) - ax.axhline(0, color='black', lw=1) - ax.set_ylabel('log₂(O1/O2) amplitude asymmetry') - ax.set_title(f'Δlog₂ = {d8["d_log2"]:+.2f}') - ax.grid(axis='y', alpha=0.3) - - fig_bm8.suptitle(f'[{ref_label}] BM8: Inter-ocular Δ-asymmetry O1/O2\n' - '≈0 bars of equal height → stationary anatomy; ' - 'unequal → eye-dependent (pathway signal)', - fontsize=10) - fig_bm8.tight_layout() - plt.show() - -############################################################################### -# ## BM9 — Lateral extrastriate P100 (P7/P8) + Oz→lateral propagation -# -# P7/P8 pick up a P100 from lateral extrastriate cortex (V2/V3/MT), typically -# delayed 5–15 ms after Oz (intracortical V1→extrastriate propagation) and -# lower amplitude. Two reads: -# -# - P100 detection at P7/P8 confirms an extrastriate response exists at all. -# - Oz→lateral propagation latency should be a small positive number (0–25 ms). -# Abnormally long or reversed sign suggests intracortical / extrastriate -# conduction issues distinct from optic-nerve demyelination. -# - -print("\n--- BM9: Lateral extrastriate P7/P8 + Oz→lateral propagation ---") - -lateral_per_eye = {} -results['lateral_p7p8'] = {} - -for eye_name, ev_avg, oz_p100 in [ - ('Left Eye', evoked_left_corr_avg, p100_left), - ('Right Eye', evoked_right_corr_avg, p100_right), -]: - if ev_avg is None: - continue - per_eye = {'oz': oz_p100, 'p7': None, 'p8': None} - per_eye_results = {} - for ch in LATERAL_CHANNELS: - if ch not in ev_avg.ch_names: - continue - _, p100_lat, _ = get_pr_vep_latencies(ev_avg.copy().pick([ch])) - per_eye[ch.lower()] = p100_lat - if p100_lat is None: - print(f"[BM9 {eye_name}] {ch}: P100 not detected") - per_eye_results[ch] = None - continue - lat_ms_v = p100_lat['latency'] * 1000.0 - amp_uv_v = p100_lat['amplitude'] * 1e6 - print(f"[BM9 {eye_name}] {ch}: P100 = {amp_uv_v:+.2f} µV at {lat_ms_v:.2f} ms") - ch_entry = {'lat_ms': _f(lat_ms_v), 'amp_uv': _f(amp_uv_v), 'propagation_ms': None} - if oz_p100 is not None: - prop_ms = lat_ms_v - oz_p100['latency'] * 1000.0 - in_range = -2 <= prop_ms <= 25 - status = 'normal' if in_range else 'OUT OF RANGE' - print(f"[BM9 {eye_name}] {ch}−Oz propagation: {prop_ms:+.2f} ms " - f"[{status}, expected −2 to +25 ms]") - ch_entry['propagation_ms'] = _f(prop_ms) - ch_entry['propagation_in_range'] = bool(in_range) - per_eye_results[ch] = ch_entry - lateral_per_eye[eye_name] = per_eye - results['lateral_p7p8'][eye_name] = per_eye_results - -# Waveform: Oz, P7, P8 per eye -fig_bm9, axes_bm9 = plt.subplots(1, 2, figsize=(14, 5), sharey=True) -lat_ch_colors = {'Oz': 'black', 'P7': '#1f77b4', 'P8': '#d62728'} -lat_ch_lw = {'Oz': 2.5, 'P7': 1.8, 'P8': 1.8} - -for ax, (eye_name, ev_avg) in zip(axes_bm9, - [('Left Eye', evoked_left_corr_avg), - ('Right Eye', evoked_right_corr_avg)]): - if ev_avg is None: - continue - t_lat = ev_avg.times * 1000 - for ch in ['Oz', 'P7', 'P8']: - if ch not in ev_avg.ch_names: - continue - idx = ev_avg.ch_names.index(ch) - ax.plot(t_lat, ev_avg.data[idx] * 1e6, - color=lat_ch_colors[ch], lw=lat_ch_lw[ch], label=ch) - - # Annotate propagation delays - eye_lat = results['lateral_p7p8'].get(eye_name, {}) - for ch in ['P7', 'P8']: - ch_entry = eye_lat.get(ch) - if ch_entry and ch_entry.get('propagation_ms') is not None: - lat_ms_v = ch_entry['lat_ms'] - prop_ms = ch_entry['propagation_ms'] - ok_str = '✓' if ch_entry.get('propagation_in_range', True) else '⚑' - # find the y value at this latency for annotation placement - t_idx_ann = int(np.argmin(np.abs(t_lat - lat_ms_v))) - y_ann = ev_avg.data[ev_avg.ch_names.index(ch), t_idx_ann] * 1e6 - ax.annotate(f'{ch}: +{prop_ms:.0f}ms {ok_str}', - xy=(lat_ms_v, y_ann), - xytext=(lat_ms_v + 15, y_ann + 1.5), - arrowprops=dict(arrowstyle='->', color=lat_ch_colors[ch], lw=1), - fontsize=8, color=lat_ch_colors[ch]) - - for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax.axvline(ms, color=col, linestyle='--', alpha=0.5, - label=lbl if ax == axes_bm9[0] else '') - ax.set_title(f'[{ref_label}] BM9: Lateral extrastriate — {eye_name}') - ax.set_xlabel('Time (ms)') - ax.axhline(0, color='black', alpha=0.3) - ax.axvline(0, color='black', linestyle='--', alpha=0.5) - if ax == axes_bm9[0]: - ax.set_ylabel('Amplitude (µV)') - handles, lbls = ax.get_legend_handles_labels() - ax.legend(dict(zip(lbls, handles)).values(), dict(zip(lbls, handles)).keys(), - fontsize=9, loc='upper right') - -fig_bm9.tight_layout() -plt.show() - -############################################################################### -# ## BM10 — Lateral extrastriate asymmetry (P7 vs P8) + inter-ocular contrast -# -# Same logic as BM7/BM8 but on P7/P8. Critical advantage: extrastriate -# generators sit on the lateral cortical surface, so paradoxical lateralization -# is much weaker here than at O1/O2. P7/P8 hemispheric asymmetry is therefore -# a more direct readout of cortical-side asymmetry — useful for detecting -# unilateral lateral-occipital / parieto-occipital involvement. -# - -print("\n--- BM10: Lateral asymmetry P7/P8 + inter-ocular contrast ---") - -p7p8_asym_per_eye = {} -for eye_name, ev_avg in [('Left Eye', evoked_left_corr_avg), - ('Right Eye', evoked_right_corr_avg)]: - if ev_avg is None: - continue - h = compute_hemi_asymmetry(ev_avg, 'P7', 'P8') - if h is None: - print(f"[BM10 {eye_name}] P100 not detected at both P7 and P8 — skipping") - continue - lat_status = 'FLAG' if h['lat_flag'] else f'within ±{IOLD_FLAG_MS:.0f} ms' - amp_status = 'FLAG' if h['amp_flag'] else 'within ±1 log₂' - print(f"[BM10 {eye_name}] P7 = {h['lat_p7']:.2f} ms, P8 = {h['lat_p8']:.2f} ms " - f"(P7−P8 = {h['lat_diff_ms']:+.2f} ms [{lat_status}])") - print(f"[BM10 {eye_name}] P7 = {h['amp_p7']:.2f} µV, P8 = {h['amp_p8']:.2f} µV " - f"(P7/P8 = {h['amp_ratio']:.2f} [{amp_status}])") - p7p8_asym_per_eye[eye_name] = h - -results['hemi_p7p8'] = dict(p7p8_asym_per_eye) -results['hemi_delta_p7p8'] = compute_hemi_delta_asymmetry( - p7p8_asym_per_eye.get('Left Eye'), p7p8_asym_per_eye.get('Right Eye'), 'P7', 'P8', -) - -if results['hemi_delta_p7p8'] is not None: - d10 = results['hemi_delta_p7p8'] - print(f"[BM10] Δlat (P7−P8): {d10['d_lat']:+.2f} ms " - f"(≈0 ⇒ stationary; large ⇒ eye-dependent)") - print(f"[BM10] Δlog₂(P7/P8): {d10['d_log2']:+.2f} " - f"(≈0 ⇒ stationary; large ⇒ eye-dependent)") - - fig_bm10, axes_bm10 = plt.subplots(1, 2, figsize=(10, 5)) - - ax = axes_bm10[0] - ax.bar(['Left Eye\ndrive', 'Right Eye\ndrive'], - [d10['lat_asym_left'] or 0, d10['lat_asym_right'] or 0], - color=['#1f77b4', '#d62728'], alpha=0.75) - ax.axhline(0, color='black', lw=1) - ax.set_ylabel('P7 − P8 latency asymmetry (ms)') - ax.set_title(f'Δlat = {d10["d_lat"]:+.2f} ms') - ax.grid(axis='y', alpha=0.3) - - ax = axes_bm10[1] - ax.bar(['Left Eye\ndrive', 'Right Eye\ndrive'], - [d10['log2_asym_left'] or 0, d10['log2_asym_right'] or 0], - color=['#1f77b4', '#d62728'], alpha=0.75) - ax.axhline(0, color='black', lw=1) - ax.set_ylabel('log₂(P7/P8) amplitude asymmetry') - ax.set_title(f'Δlog₂ = {d10["d_log2"]:+.2f}') - ax.grid(axis='y', alpha=0.3) - - fig_bm10.suptitle(f'[{ref_label}] BM10: Inter-ocular Δ-asymmetry P7/P8\n' - '≈0 → stationary anatomy; unequal → eye-dependent (cortical-side signal)', - fontsize=10) - fig_bm10.tight_layout() - plt.show() - -############################################################################### -# ## BM11 — Combined lateral hemisphere composites -# -# Per-hemisphere composites: L-hemi = (O1+P7)/2, R-hemi = (O2+P8)/2. -# Three advantages over O1/O2 alone: -# - SNR ≈ √2 better (averaging two channels per hemisphere). -# - Dilutes the contribution of any single bad electrode contact. -# - Mixes the paradoxically-projected V1 component (O1/O2) with the -# directly-projected extrastriate component (P7/P8), giving a composite -# that is less ambiguous about cortical side than O1/O2 alone. -# - -print("\n--- BM11: Combined lateral hemisphere composites ---") - -fig_bm11, axes_bm11 = plt.subplots(1, 2, figsize=(16, 6), sharey=True) -composite_p100 = {} - -for ax, (eye_name, ev_avg, color) in zip(axes_bm11, [ - ('Left Eye', evoked_left_corr_avg, 'blue'), - ('Right Eye', evoked_right_corr_avg, 'red'), -]): - if ev_avg is None: - continue - if not all(ch in ev_avg.ch_names for ch in ('O1', 'O2', 'P7', 'P8')): - continue - idx_o1 = ev_avg.ch_names.index('O1') - idx_o2 = ev_avg.ch_names.index('O2') - idx_p7 = ev_avg.ch_names.index('P7') - idx_p8 = ev_avg.ch_names.index('P8') - - l_hemi = (ev_avg.data[idx_o1] + ev_avg.data[idx_p7]) / 2.0 - r_hemi = (ev_avg.data[idx_o2] + ev_avg.data[idx_p8]) / 2.0 - t_comp = ev_avg.times * 1000 - - ax.plot(t_comp, l_hemi * 1e6, color='#1f77b4', lw=2, - label='L-hemi (O1+P7)/2') - ax.plot(t_comp, r_hemi * 1e6, color='#d62728', lw=2, - label='R-hemi (O2+P8)/2') - - win_mask = (t_comp >= P100_WIN_MS[0]) & (t_comp <= P100_WIN_MS[1]) - win_t = t_comp[win_mask] - l_lat = win_t[np.argmax(l_hemi[win_mask])] - r_lat = win_t[np.argmax(r_hemi[win_mask])] - l_amp = float(l_hemi[win_mask].max() * 1e6) - r_amp = float(r_hemi[win_mask].max() * 1e6) - composite_p100[eye_name] = {'l_lat': l_lat, 'r_lat': r_lat, - 'l_amp': l_amp, 'r_amp': r_amp} - print(f"[BM11 {eye_name}] L-hemi P100 = {l_amp:+.2f} µV @ {l_lat:.1f} ms | " - f"R-hemi P100 = {r_amp:+.2f} µV @ {r_lat:.1f} ms") - - for ms, col, lbl in zip(LANDMARK_MS, LANDMARK_COLORS, LANDMARK_LABELS): - ax.axvline(ms, color=col, linestyle='--', alpha=0.6, - label=lbl if ax == axes_bm11[0] else '') - ax.set_title(f'[{ref_label}] BM11: Composite hemispheres — {eye_name}') - ax.set_xlabel('Time (ms)') - if ax == axes_bm11[0]: - ax.set_ylabel('Amplitude (µV)') - ax.axhline(0, color='black', alpha=0.3) - ax.axvline(0, color='black', linestyle='--', alpha=0.5) - ax.legend(loc='upper right') - -fig_bm11.tight_layout() -plt.show() - -results['composite'] = {eye: {k: _f(v) for k, v in d.items()} - for eye, d in composite_p100.items()} -results['composite_delta'] = None -if 'Left Eye' in composite_p100 and 'Right Eye' in composite_p100: - Lc = composite_p100['Left Eye'] - Rc = composite_p100['Right Eye'] - d_lat_comp = (Lc['l_lat'] - Lc['r_lat']) - (Rc['l_lat'] - Rc['r_lat']) - log2_L = np.log2(Lc['l_amp'] / Lc['r_amp']) if Lc['r_amp'] > 0 else float('nan') - log2_R = np.log2(Rc['l_amp'] / Rc['r_amp']) if Rc['r_amp'] > 0 else float('nan') - d_log2_comp = log2_L - log2_R - print(f"[BM11] Composite Δlat = {d_lat_comp:+.2f} ms (eye-dependent hemispheric latency skew)") - print(f"[BM11] Composite Δlog₂ = {d_log2_comp:+.2f} (eye-dependent hemispheric amplitude skew)") - results['composite_delta'] = {'d_lat': _f(d_lat_comp), 'd_log2': _f(d_log2_comp)} - -############################################################################### -# ## BM12 — Topology QC: Pz gradient + Fz Halliday polarity inversion -# -# Halliday's frontal polarity-inversion check: a genuine V1-generated P100 -# produces a *negative* deflection at Fz at the same latency, because the -# posterior-pointing dipole projects with inverted polarity to the frontal -# scalp. This is a strong generator-confirmation that artifact, EMG, or -# alpha contamination cannot mimic. Pz should additionally show a smaller -# positive P100 (gradient: Oz > Pz, Fz < 0). -# -# Only meaningful under linked-mastoid: Fz is zero by construction under -# the Oz−Fz reference scheme. -# - -results['topology'] = None -print("\n--- BM12: Topology QC (Pz gradient + Fz Halliday inversion) ---") - -topology_results = {} -for eye_name, ev_avg, oz_p100 in [ - ('Left Eye', evoked_left_corr_avg, p100_left), - ('Right Eye', evoked_right_corr_avg, p100_right), -]: - if ev_avg is None or oz_p100 is None: - print(f"[BM12 {eye_name}] Oz P100 not detected — skipping") - continue - - oz_lat_s = oz_p100['latency'] - t_idx = int(round((oz_lat_s - ev_avg.tmin) * ev_avg.info['sfreq'])) - t_idx = max(0, min(t_idx, ev_avg.data.shape[1] - 1)) - - oz_val = ev_avg.data[ev_avg.ch_names.index('Oz'), t_idx] * 1e6 - pz_val = ev_avg.data[ev_avg.ch_names.index('Pz'), t_idx] * 1e6 if 'Pz' in ev_avg.ch_names else None - fz_val = ev_avg.data[ev_avg.ch_names.index('Fz'), t_idx] * 1e6 if 'Fz' in ev_avg.ch_names else 0.0 - - if 'M2' in ev_avg.ch_names: - m2_val = ev_avg.data[ev_avg.ch_names.index('M2'), t_idx] * 1e6 - oz_val -= m2_val - if pz_val is not None: - pz_val -= m2_val - fz_val -= m2_val - ref_note = "re-referenced to M2" - else: - ref_note = "using current ref" - - entry = {'oz_amp_uv': _f(oz_val), 'pz_amp_uv': None, 'fz_amp_uv': None, - 'pz_gradient_ok': None, 'fz_inversion_ok': None} - - if pz_val is not None: - pz_ok = 0 < pz_val < oz_val - pz_str = 'OK (positive, < Oz)' if pz_ok else 'FLAG: gradient broken' - print(f"[BM12 {eye_name}] Pz @ {oz_lat_s*1000:.1f} ms: {pz_val:+.2f} µV " - f"(Oz = {oz_val:+.2f} µV) [{pz_str}, {ref_note}]") - entry['pz_amp_uv'] = _f(pz_val) - entry['pz_gradient_ok'] = bool(pz_ok) - - fz_ok = fz_val < 0 - fz_str = ('OK (inverted ⇒ V1 generator confirmed)' - if fz_ok else 'FLAG: same-sign as Oz') - print(f"[BM12 {eye_name}] Fz @ {oz_lat_s*1000:.1f} ms: {fz_val:+.2f} µV " - f"(Oz = {oz_val:+.2f} µV) [{fz_str}, {ref_note}]") - entry['fz_amp_uv'] = _f(fz_val) - entry['fz_inversion_ok'] = bool(fz_ok) - - topology_results[eye_name] = entry - -results['topology'] = topology_results - -if topology_results: - fig_bm12, ax_bm12 = plt.subplots(figsize=(8, 5)) - eyes_t = list(topology_results.keys()) - x_t = np.arange(len(eyes_t)) - w_t = 0.22 - ch_order = [('oz_amp_uv', 'Oz', 'black'), - ('pz_amp_uv', 'Pz', '#2ca02c'), - ('fz_amp_uv', 'Fz', '#ff7f0e')] - for i, (key, label, color) in enumerate(ch_order): - vals = [topology_results.get(eye, {}).get(key) or 0 for eye in eyes_t] - ax_bm12.bar(x_t + (i - 1) * w_t, vals, w_t, - color=color, alpha=0.75, label=label) - ax_bm12.axhline(0, color='black', lw=0.8) - ax_bm12.set_xticks(x_t) - ax_bm12.set_xticklabels(eyes_t) - ax_bm12.set_ylabel('Amplitude at Oz-P100 latency (µV)') - ax_bm12.set_title(f'[{ref_label}] BM12: Topology QC (M2 referenced)\n' - 'Oz > 0, Pz > 0 (gradient), Fz < 0 (Halliday inversion)') - ax_bm12.legend() - ax_bm12.grid(axis='y', alpha=0.3) - fig_bm12.tight_layout() - plt.show() - -# ========================================================================= -# SUMMARY -# ========================================================================= -print("\n" + "="*70) -print("BIOMARKER SUMMARY") -print("="*70) - -_summary = [] - -def _row(bm_id, name, flag, value_str): - _summary.append({'id': bm_id, 'name': name, 'flag': flag, 'value': value_str}) - -def _fmt_delta(d, lat_key='d_lat', log2_key='d_log2'): - if not d or d.get(lat_key) is None: - return 'N/A' - log2_v = d.get(log2_key) - return f'Δlat={d[lat_key]:+.2f} ms, Δlog₂=' + (f'{log2_v:+.2f}' if log2_v is not None else 'N/A') - -iold = results.get('iold') or {} -_row('BM1', 'IOLD pooled (Oz)', - iold.get('flag'), - f'{iold["iold_ms"]:+.1f} ms' if iold.get('iold_ms') is not None else 'N/A') - -for size, d_sz in (results.get('iold_per_size') or {}).items(): - _row(f'BM2/{size}', f'IOLD {size} checks (Oz)', - d_sz['flag'] if d_sz else None, - f'{d_sz["iold_ms"]:+.1f} ms' if d_sz and d_sz.get('iold_ms') is not None else 'N/A') - -_s = results.get('slope') or {} -_row('BM3', 'Check-size slope diff (Oz)', - None, - f'{_s["slope_diff"]:+.4f} ms/arcmin' if _s.get('slope_diff') is not None else 'N/A') - -_a = results.get('amplitude') or {} -_row('BM4', 'Amplitude ratio L/R (Oz)', - _a.get('flag'), - (f'{_a["ratio"]:.2f} (log₂={_a["log2_ratio"]:+.2f})' - if _a.get('ratio') is not None else 'N/A')) - -_b = results.get('bootstrap') or {} -_row('BM5', 'Bootstrap IOLD 95% CI', - (not _b.get('iold_excludes_zero')) if _b else None, - (f'[{_b["iold_ci_lo_ms"]:+.1f}, {_b["iold_ci_hi_ms"]:+.1f}] ms' - if _b and _b.get('iold_ci_lo_ms') is not None else 'N/A')) - -_w = results.get('wpeak') or {} -any_wpeak = any(v.get('flagged') for v in _w.values()) -_row('BM6', 'W-peak (bifurcated P100)', - any_wpeak if _w else None, - 'Flagged in: ' + ', '.join(e for e, v in _w.items() if v.get('flagged')) if any_wpeak else 'None detected') - -for eye_name, h7 in (results.get('hemi_o1o2') or {}).items(): - _row(f'BM7/{eye_name[:1]}', f'Hemi asym O1/O2 — {eye_name}', - h7.get('lat_flag') or h7.get('amp_flag'), - (f'lat diff={h7["lat_diff_ms"]:+.1f} ms, amp ratio={h7["amp_ratio"]:.2f}' - if h7 else 'N/A')) - -_row('BM8', 'Δ-asymmetry O1/O2 (eye-dependent?)', - None, _fmt_delta(results.get('hemi_delta_o1o2') or {})) - -for eye_name, h_lat in results.get('lateral_p7p8', {}).items(): - vals_9 = [f'{ch}: {v["propagation_ms"]:+.0f}ms' if v and v.get('propagation_ms') is not None else f'{ch}: N/A' - for ch, v in h_lat.items()] - any_oor = any(v and v.get('propagation_in_range') is False for v in h_lat.values()) - _row(f'BM9/{eye_name[:1]}', f'Lateral P7/P8 propagation — {eye_name}', - any_oor if h_lat else None, - ' '.join(vals_9)) - -_row('BM10', 'Δ-asymmetry P7/P8 (eye-dependent?)', - None, _fmt_delta(results.get('hemi_delta_p7p8') or {})) - -_row('BM11', 'Composite hemi Δ', - None, _fmt_delta(results.get('composite_delta') or {})) - -_topo = results.get('topology') or {} -topo_flags = [e for e, entry in _topo.items() - if entry and (entry.get('pz_gradient_ok') is False - or entry.get('fz_inversion_ok') is False)] -_row('BM12', 'Topology QC (Pz gradient + Fz inversion)', - bool(topo_flags) if _topo else None, - 'FLAG: ' + ', '.join(topo_flags) if topo_flags else ('OK' if _topo else 'Skipped (not LM ref)')) - -print(f"\n {'BM':<10} {'Name':<48} {'Status':<12} Value") -print(" " + "-"*90) -for row in _summary: - flag = row['flag'] - status_str = '⚑ FLAGGED' if flag is True else ('N/A' if flag is None else 'OK') - print(f" {row['id']:<10} {row['name']:<48} {status_str:<12} {row['value']}") - -############################################################################### -# ## Summary dashboard figure -# - -n_rows = len(_summary) -fig_sum, ax_sum = plt.subplots(figsize=(13, max(5, n_rows * 0.42 + 1.0))) - -bar_colors = ['#e74c3c' if r['flag'] is True - else ('#95a5a6' if r['flag'] is None - else '#27ae60') - for r in _summary] - -ax_sum.barh(range(n_rows), [1] * n_rows, color=bar_colors, alpha=0.85, height=0.7) - -for i, row in enumerate(reversed(_summary)): - y = i - flag = row['flag'] - status_str = '⚑ FLAGGED' if flag is True else ('N/A' if flag is None else 'OK') - # biomarker label on the left - ax_sum.text(-0.02, y, f"{row['id']}: {row['name']}", - ha='right', va='center', fontsize=9) - # status text inside bar - ax_sum.text(0.5, y, status_str, - ha='center', va='center', fontsize=9, - fontweight='bold', color='white') - # value on the right - ax_sum.text(1.02, y, row['value'], - ha='left', va='center', fontsize=8, color='#444444') - -ax_sum.set_xlim(-4.5, 4.5) -ax_sum.set_ylim(-0.5, n_rows - 0.5) -ax_sum.axis('off') -ax_sum.set_title(f'[{ref_label}] Biomarker Summary Dashboard\n' - 'Green = OK Red = Flagged Grey = N/A or not computed', - fontsize=11, pad=12) -fig_sum.tight_layout() -plt.show() - -############################################################################### -# ## Persist biomarkers to disk -# -# Read-merge-write into ``biomarkers.json``: this run's REF_SCHEME slot is -# updated; other ref schemes already persisted from prior runs are preserved. -# Run the notebook once per REF_SCHEME to populate both keys. -# - -biomarker_path = recording_dir / 'biomarkers.json' -if biomarker_path.exists(): - with open(biomarker_path, 'r', encoding='utf-8') as f: - biomarker_payload = json.load(f) - biomarker_payload.setdefault('references', {}) -else: - biomarker_payload = {'references': {}} - -biomarker_payload.update({ - 'subject_id': SUBJECT_ID, - 'session_nb': SESSION_NB, - 'device_name': DEVICE_NAME, - 'experiment': EXPERIMENT, - 'site': SITE, - 'display': DISPLAY, - 'montage': MONTAGE, - 'analysis_timestamp': datetime.datetime.now().isoformat(timespec='seconds'), - 'link_panel_lag_ms': link_panel_lag * 1000.0, - 'link_panel_lag_err_ms': link_panel_lag_err * 1000.0, - 'pc_lag_ms_mean': float(pc_lag_s.mean() * 1000.0), - 'pc_lag_ms_std': float(pc_lag_s.std() * 1000.0), - 'n_recordings': len(recording_files), -}) -biomarker_payload['references'][ref_label] = results - -with open(biomarker_path, 'w', encoding='utf-8') as f: - json.dump(biomarker_payload, f, indent=2, ensure_ascii=False) -print(f"\n[persist] biomarkers written to: {biomarker_path}") -print(f"[persist] reference schemes now persisted: {list(biomarker_payload['references'])}") From a3d5427f96be1982faab0ec34416917508cd74ea Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Tue, 12 May 2026 22:33:21 +1000 Subject: [PATCH 87/94] revert --- .gitignore | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 40e3c80c4..f2ca75a7e 100644 --- a/.gitignore +++ b/.gitignore @@ -12,9 +12,6 @@ doc/sg_execution_times.rst # Built by auto_examples examples/visual_cueing/*.csv -# Jupytext-paired notebooks (the .py is the source of truth; .ipynb is auto-paired) -**.ipynb - # tests/coverage artifacts .coverage coverage.xml @@ -23,4 +20,4 @@ htmlcov # PyCharm .idea/ -**/.DS_Store +**/.DS_Store \ No newline at end of file From f4f20033c8412d4c2234661e66206ffd44edada5 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Thu, 14 May 2026 17:59:57 +1000 Subject: [PATCH 88/94] simplified markers --- .../visual_vep/pattern_reversal_vep.py | 30 +++++-------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index 43f229aa4..714ff536c 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -25,8 +25,7 @@ # MNE epoch by partial match (e.g. event_id key 'rev/left' selects both sizes). # Kept stable across recordings so analysis can hard-code this dict. EVENTS = { - **{f"rev/{c['eye']}/{c['size_name']}": 1 + i for i, c in enumerate(CONDITIONS)}, - **{f"block/{c['eye']}/{c['size_name']}": 100 + i for i, c in enumerate(CONDITIONS)}, + f"rev/{c['eye']}/{c['size_name']}": 1 + i for i, c in enumerate(CONDITIONS) } @@ -42,8 +41,9 @@ def __init__(self, eeg: Optional[EEG] = None, save_fn=None, Pattern Reversal VEP with two check sizes, counterbalanced across blocks. Block schedule: 4 shuffled conditions (left/right eye, large/small check) × - ``reps_per_condition`` blocks. Block-start markers (100–103) are pushed on - the first reversal of each block to record the condition sequence. + ``reps_per_condition`` blocks. Each reversal is marked with a code 1–4 + identifying the condition; the condition is fully recoverable from the + reversal marker stream alone. """ n_conditions = 4 n_blocks = n_conditions * reps_per_condition @@ -291,17 +291,10 @@ def present_block_instructions(self, current_block: int) -> None: # ------------------------------------------------------------------ def present_stimulus(self, idx: int): - # Push block-start marker on the first reversal of each block. - # This lands in the EEG file before the first reversal marker and - # encodes the full condition (eye × check-size) for the analysis. - if idx == 0: - c = CONDITIONS[self.block_labels[self.current_block_index]] - self.push_marker( - EVENTS[f"block/{c['eye']}/{c['size_name']}"], - self.current_block_index * self.block_trial_size, - ) - flip_time = self.draw_frame(idx) - self._push_reversal_marker(idx, flip_time) + self.draw_frame(idx) + trial_idx = self.current_block_index * self.block_trial_size + idx + c = CONDITIONS[int(self.parameter[trial_idx])] + self.push_marker(EVENTS[f"rev/{c['eye']}/{c['size_name']}"], trial_idx) def draw_frame(self, idx: int): trial_idx = self.current_block_index * self.block_trial_size + idx @@ -348,13 +341,7 @@ def draw_frame(self, idx: int): self.window.flip() - def _push_reversal_marker(self, idx: int): - trial_idx = self.current_block_index * self.block_trial_size + idx - c = CONDITIONS[int(self.parameter[trial_idx])] - self.push_marker(EVENTS[f"rev/{c['eye']}/{c['size_name']}"], trial_idx) - def present_soa(self, idx: int): - # Keep the compositor fed at full frame rate; no marker push. self.draw_frame(idx) def present_iti(self): @@ -365,4 +352,3 @@ def present_iti(self): else: self.grey_background.draw() self.window.flip() -window.flip() From f166658eca4e12cf3d71b8f1001531b93653a784 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Fri, 15 May 2026 18:56:08 +1000 Subject: [PATCH 89/94] remove placeholder --- eegnb/analysis/recording_quality.py | 236 +++++++----- .../02r__pattern_reversal_longitudinal.py | 337 ------------------ 2 files changed, 145 insertions(+), 428 deletions(-) delete mode 100644 examples/visual_vep/02r__pattern_reversal_longitudinal.py diff --git a/eegnb/analysis/recording_quality.py b/eegnb/analysis/recording_quality.py index 60cb091b6..ab307a058 100644 --- a/eegnb/analysis/recording_quality.py +++ b/eegnb/analysis/recording_quality.py @@ -1,7 +1,17 @@ """Per-recording contact quality diagnostic for an eegnb session directory. -Can be used programmatically (returns a formatted string or structured dict) -or from the command line via ``tools/recording_quality.py``. +Returns structured DataFrames for notebook display alongside a formatted text +report for console / experiment use. + +Notebook usage: + result = check_session(session_dir) + display(result['per_channel']) # styled DataFrame, columns aligned + display(result['summary']) + result['flagged_channels'] + result['shared_ref_suspect'] + +Console / experiment usage: + print(check_session(session_dir)['report']) """ import pathlib @@ -42,32 +52,48 @@ def _channel_metrics(x: np.ndarray, sfreq: float) -> dict: } -def check_session(session_dir: pathlib.Path) -> dict: - """Return structured quality metrics for a session directory. +def _build_per_channel_df(rows: list) -> pd.DataFrame: + """Build a tidy per-channel DataFrame with relative metrics and flags.""" + df = pd.DataFrame(rows) + if df.empty: + return df - Reads every ``recording_*.csv`` (excluding ``*_timing.csv``) and computes - per-channel std / p99 / drift metrics. + med_by_rec = df.groupby('rec')[['std', 'drift']].transform('median') + df['std_x'] = df['std'] / med_by_rec['std'].where(med_by_rec['std'] > 0, 1.0) + df['drift_x'] = df['drift'] / med_by_rec['drift'].where(med_by_rec['drift'] > 0, 1.0) + df['flagged'] = (df['std_x'] > NOISE_FACTOR_FLAG) | (df['drift_x'] > NOISE_FACTOR_FLAG) + return df[['rec', 'ch', 'std', 'std_x', 'p99', 'max', 'min', + 'drift', 'drift_x', 'pct_big', 'flagged']] - Returns a dict with keys: - report : str — formatted text report (same as report_session()) - flagged_channels : list — channel names flagged in any recording - (std or drift > 1.5× group median) - shared_ref_suspect : bool — True when ≥ half of channels are flagged, - indicating M1/SRB loose rather than isolated - electrode contacts - """ - session_dir = pathlib.Path(session_dir).expanduser().resolve() - recs = sorted( - p for p in session_dir.glob('recording_*.csv') - if not p.stem.endswith('_timing') and not p.name.endswith('.excluded') + +def _build_summary_df(per_channel: pd.DataFrame) -> pd.DataFrame: + """Per-recording summary with exclusion factor relative to cleanest recording.""" + if per_channel.empty: + return pd.DataFrame() + summary = per_channel.groupby('rec').agg( + med_std=('std', 'median'), + med_p99=('p99', 'median'), + med_drift=('drift', 'median'), + n_flagged=('flagged', 'sum'), + n_channels=('ch', 'count'), ) + baseline = float(summary.med_std.min()) + summary['factor_x'] = summary.med_std / baseline if baseline > 0 else 1.0 + summary['exclude'] = summary.factor_x > NOISE_FACTOR_FLAG + return summary + +def _format_report(session_dir: pathlib.Path, + recs: list, + per_channel: pd.DataFrame, + summary: pd.DataFrame) -> str: + """Format the structured DataFrames into the text report string.""" lines = [] w = lines.append if not recs: w(f'No recording_*.csv files found in {session_dir}') - return {'report': '\n'.join(lines), 'flagged_channels': [], 'shared_ref_suspect': False} + return '\n'.join(lines) w(f'Session: {session_dir.name}') w(f'Found {len(recs)} recording(s)') @@ -83,98 +109,126 @@ def check_session(session_dir: pathlib.Path) -> dict: w('the others. A single outlier = bad electrode contact. All channels inflated = loose reference.') w('') - rows = [] - flagged_channels: set = set() - - for p in recs: - df = pd.read_csv(p) - eeg_chs = [c for c in df.columns if c in EEG_CHANNEL_CANDIDATES] - sfreq = _detect_sfreq(df['timestamps'].values) if 'timestamps' in df else 250.0 - rec_min = len(df) / sfreq / 60.0 - w(f'=== {p.stem.split("recording_")[-1]} ' - f'({rec_min:.1f} min, {len(df)} samples, ~{sfreq:.0f} Hz) ===') - - ch_metrics = {} - for ch in eeg_chs: - ch_metrics[ch] = _channel_metrics(df[ch].values.astype(float), sfreq) - rows.append({'rec': p.stem.split('recording_')[-1], 'ch': ch, **ch_metrics[ch]}) - - med_std = float(np.median([m['std'] for m in ch_metrics.values()])) - med_drift = float(np.median([m['drift'] for m in ch_metrics.values()])) - - w(f' {"ch":>4} {"std":>8} {"std×":>5} {"p99|x|":>8} ' - f'{"max":>8} {"min":>8} {"drift":>8} {"drift×":>6} {"%>{:.0f}".format(BIG_SAMPLE_UV):>6}') - for ch, m in ch_metrics.items(): - std_x = m['std'] / med_std if med_std > 0 else 1.0 - drift_x = m['drift'] / med_drift if med_drift > 0 else 1.0 - flagged = std_x > NOISE_FACTOR_FLAG or drift_x > NOISE_FACTOR_FLAG - if flagged: - flagged_channels.add(ch) - flag_str = '⚑' if flagged else ' ' - w(f' {ch:>4} {m["std"]:>8.1f} {std_x:>5.2f} {m["p99"]:>8.1f} ' + header = (f' {"ch":>4} {"std":>8} {"std×":>5} {"p99|x|":>8} ' + f'{"max":>8} {"min":>8} {"drift":>8} {"drift×":>6} ' + f'{"%>{:.0f}".format(BIG_SAMPLE_UV):>6} {"flag":>4}') + + for rec_id in summary.index: + rec_rows = per_channel[per_channel['rec'] == rec_id] + n_samples = len(rec_rows) and int(rec_rows.iloc[0].get('n_samples', 0)) # placeholder + rec_meta = next((r for r in recs if r['rec'] == rec_id), None) + if rec_meta: + w(f'=== {rec_id} ({rec_meta["minutes"]:.1f} min, ' + f'{rec_meta["n_samples"]} samples, ~{rec_meta["sfreq"]:.0f} Hz) ===') + else: + w(f'=== {rec_id} ===') + w(header) + for _, m in rec_rows.iterrows(): + flag_str = '⚑' if m['flagged'] else ' ' + w(f' {m["ch"]:>4} {m["std"]:>8.1f} {m["std_x"]:>5.2f} {m["p99"]:>8.1f} ' f'{m["max"]:>8.1f} {m["min"]:>8.1f} ' - f'{m["drift"]:>8.1f} {drift_x:>6.2f} {m["pct_big"]:>6.2f} {flag_str}') - w(f' (median std={med_std:.1f} µV median drift={med_drift:.1f} µV ' - f'flag threshold: ×>{NOISE_FACTOR_FLAG})') + f'{m["drift"]:>8.1f} {m["drift_x"]:>6.2f} {m["pct_big"]:>6.2f} {flag_str:>4}') - # Shared-reference diagnosis per recording: if ≥ half of channels are - # flagged the noise is uniform, pointing at a loose M1/SRB rather than - # isolated electrode contacts. - n_flagged_rec = sum( - 1 for m in ch_metrics.values() - if (m['std'] / med_std if med_std > 0 else 1.0) > NOISE_FACTOR_FLAG - or (m['drift'] / med_drift if med_drift > 0 else 1.0) > NOISE_FACTOR_FLAG - ) - if n_flagged_rec >= len(eeg_chs) / 2: - w(f' ⚑ SHARED REFERENCE SUSPECT — {n_flagged_rec}/{len(eeg_chs)} channels flagged ' + s = summary.loc[rec_id] + w(f' (median std={s.med_std:.1f} µV median drift={s.med_drift:.1f} µV ' + f'flag threshold: ×>{NOISE_FACTOR_FLAG})') + if s.n_flagged >= s.n_channels / 2: + w(f' ⚑ SHARED REFERENCE SUSPECT — {int(s.n_flagged)}/{int(s.n_channels)} channels flagged ' f'(all-channel inflation → M1/SRB loose)') - elif n_flagged_rec: - w(f' ⚑ {n_flagged_rec} channel(s) flagged — isolated contact issue(s)') + elif s.n_flagged: + w(f' ⚑ {int(s.n_flagged)} channel(s) flagged — isolated contact issue(s)') w('') - df_all = pd.DataFrame(rows) - summary = df_all.groupby('rec').agg( - med_std=('std', 'median'), - med_p99=('p99', 'median'), - med_drift=('drift', 'median'), - ) - w('=== PER-RECORDING SUMMARY (median across EEG channels) ===') w(f' {"rec":<22} {"med_std":>8} {"med_p99":>8} {"med_drift":>10}') - for rec in summary.index: - s = summary.loc[rec] - w(f' {rec:<22} {s.med_std:>8.1f} {s.med_p99:>8.1f} {s.med_drift:>10.1f}') + for rec_id in summary.index: + s = summary.loc[rec_id] + w(f' {rec_id:<22} {s.med_std:>8.1f} {s.med_p99:>8.1f} {s.med_drift:>10.1f}') w('') w('=== EXCLUSION CANDIDATES ===') - baseline = float(summary.med_std.min()) - any_exclude = False - for rec in summary.index: - factor = float(summary.loc[rec, 'med_std']) / baseline - flag = factor > NOISE_FACTOR_FLAG - any_exclude |= flag - w(f' {rec}: median_std={summary.loc[rec,"med_std"]:.1f} ' - f'({factor:.2f}x) [{"EXCLUDE?" if flag else "ok"}]') + for rec_id in summary.index: + s = summary.loc[rec_id] + w(f' {rec_id}: median_std={s.med_std:.1f} ' + f'({s.factor_x:.2f}x) [{"EXCLUDE?" if s.exclude else "ok"}]') w('') - if any_exclude: + if summary.exclude.any(): w('⚑ One or more recordings flagged as substantially noisier.') - # Determine overall shared-reference suspicion across the whole session - all_ch_names = list(dict.fromkeys(r['ch'] for r in rows)) # ordered unique + return '\n'.join(lines) + + +def check_session(session_dir: pathlib.Path) -> dict: + """Return structured quality metrics for a session directory. + + Reads every ``recording_*.csv`` (excluding ``*_timing.csv``) and computes + per-channel std / p99 / drift metrics. + + Returns a dict with keys: + per_channel : DataFrame — one row per (recording, channel) with + std, std×, p99, max/min, drift, drift×, + pct_big, flagged + summary : DataFrame — one row per recording with med_std, + med_p99, med_drift, n_flagged, + n_channels, factor_x, exclude + report : str — formatted text report for console use + flagged_channels : list — channel names flagged in any recording + (std or drift > 1.5× group median) + shared_ref_suspect : bool — True when ≥ half of all unique channels + are flagged across the session, + indicating M1/SRB loose rather than + isolated electrode contacts + """ + session_dir = pathlib.Path(session_dir).expanduser().resolve() + rec_paths = sorted( + p for p in session_dir.glob('recording_*.csv') + if not p.stem.endswith('_timing') and not p.name.endswith('.excluded') + ) + + if not rec_paths: + empty = pd.DataFrame() + return { + 'per_channel': empty, + 'summary': empty, + 'report': f'No recording_*.csv files found in {session_dir}', + 'flagged_channels': [], + 'shared_ref_suspect': False, + } + + rows = [] + recs_meta = [] + + for p in rec_paths: + df = pd.read_csv(p) + eeg_chs = [c for c in df.columns if c in EEG_CHANNEL_CANDIDATES] + sfreq = _detect_sfreq(df['timestamps'].values) if 'timestamps' in df else 250.0 + rec_id = p.stem.split('recording_')[-1] + recs_meta.append({ + 'rec': rec_id, 'minutes': len(df) / sfreq / 60.0, + 'n_samples': len(df), 'sfreq': sfreq, + }) + for ch in eeg_chs: + rows.append({'rec': rec_id, 'ch': ch, + **_channel_metrics(df[ch].values.astype(float), sfreq)}) + + per_channel = _build_per_channel_df(rows) + summary = _build_summary_df(per_channel) + report = _format_report(session_dir, recs_meta, per_channel, summary) + + flagged_channels = sorted(per_channel.loc[per_channel.flagged, 'ch'].unique().tolist()) + all_ch_names = list(dict.fromkeys(per_channel['ch'])) shared_ref_suspect = len(flagged_channels) >= len(all_ch_names) / 2 return { - 'report': '\n'.join(lines), - 'flagged_channels': sorted(flagged_channels), + 'per_channel': per_channel, + 'summary': summary, + 'report': report, + 'flagged_channels': flagged_channels, 'shared_ref_suspect': shared_ref_suspect, } def report_session(session_dir: pathlib.Path) -> str: - """Return a formatted quality report string for a session directory. - - Reads every ``recording_*.csv`` (excluding ``*_timing.csv``) and reports - per-channel std / p99 / drift, plus exclusion candidates. - """ + """Return a formatted quality report string for a session directory.""" return check_session(session_dir)['report'] diff --git a/examples/visual_vep/02r__pattern_reversal_longitudinal.py b/examples/visual_vep/02r__pattern_reversal_longitudinal.py deleted file mode 100644 index 811a3d594..000000000 --- a/examples/visual_vep/02r__pattern_reversal_longitudinal.py +++ /dev/null @@ -1,337 +0,0 @@ -# --- -# jupyter: -# jupytext: -# formats: ipynb,py:sphinx -# text_representation: -# extension: .py -# format_name: sphinx -# format_version: '1.1' -# jupytext_version: 1.19.1 -# kernelspec: -# display_name: eeg-experiments -# language: python -# name: python3 -# --- - -""" - -# Pattern Reversal VEP: Longitudinal Analysis - -Aggregates per-session biomarker JSON files written by -``01r__pattern_reversal_viz.py`` into a single per-subject longitudinal -trend view. Each prior session must have been analysed by 01r at least -once (so its ``biomarkers.json`` exists in the recording directory); -this script does **not** recompute biomarkers from raw EEG — it reads -the persisted JSON and plots trends across sessions. - -Why this split: the per-session analysis is expensive (load EEG, -filter, epoch, bootstrap), but the trend view is cheap (read JSON, -plot). Persisting biomarkers per session means new longitudinal points -are added in seconds rather than minutes, and individual sessions can -be re-analysed without invalidating the rest of the series. - -Outputs: - -- A summary DataFrame indexed by session, with one row per (session, - reference scheme) pair. -- A trend figure showing IOLD, per-eye P100 latency, check-size slope - difference, and the O1/O2 and P7/P8 Δ-asymmetry contrasts as a - function of session. -- Bootstrap CI bands around the IOLD trend so a real shift is visually - separable from session noise. - -""" - -############################################################################### -# ## Setup -# -# - -import json -import warnings -warnings.filterwarnings('ignore') - -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -plt.ion() - -from eegnb import get_recording_dir - -# sphinx_gallery_thumbnail_number = 1 - -############################################################################### -# ## Configure subject / experiment selectors -# -# Change these placeholders to point at the subject + experiment + site whose -# sessions you want to plot. The script will glob every session directory it -# finds under that path and load each session's ``biomarkers.json``. -# - -# --- CHANGE THESE PLACEHOLDERS TO POINT AT YOUR OWN SUBJECT --------------- -SUBJECT_ID = 0 # placeholder — your subject number -DEVICE_NAME = 'cyton' -EXPERIMENT = 'visual-PRVEP' -DISPLAY = 'quest-2_120Hz' # display tag in the site path -MONTAGE = 'cap' # 'cap' or 'mark-iv' -SITE = f'{DISPLAY}_{MONTAGE}' -# -------------------------------------------------------------------------- - -# Reference scheme to plot as the primary line (the other is overlaid lighter). -PRIMARY_REF = 'Linked Mastoid M1+M2' # alternative: 'Fz (ISCEV)' - -############################################################################### -# ## Discover session JSON files -# -# Each session's ``biomarkers.json`` lives in the per-session recording dir. -# We use SESSION_NB = 0 just to anchor the path (we then walk one level up to -# find every sibling session directory). -# - -anchor_dir = get_recording_dir(DEVICE_NAME, EXPERIMENT, SUBJECT_ID, 0, site=SITE) -subject_dir = anchor_dir.parent # .../subject{SID}/ -print(f"[scan] subject dir: {subject_dir}") - -session_dirs = sorted(p for p in subject_dir.glob('session*') if p.is_dir()) -print(f"[scan] found {len(session_dirs)} session directories") - -session_jsons = [] -for sd in session_dirs: - bj = sd / 'biomarkers.json' - if bj.exists(): - session_jsons.append(bj) - else: - print(f"[skip] {sd.name}: no biomarkers.json (run 01r on it first)") - -if not session_jsons: - raise RuntimeError( - f"No biomarkers.json files found under {subject_dir}. " - "Run 01r__pattern_reversal_viz.py against each session first to " - "generate the per-session biomarker payloads." - ) - -print(f"[scan] {len(session_jsons)} session(s) have biomarkers.json") - -############################################################################### -# ## Load and flatten into a DataFrame -# -# One row per (session, reference scheme), with biomarker fields flattened -# into named columns. Fields that aren't present in a session land as NaN. -# - - -def flatten_session(payload): - """One dict per ref scheme in a session payload, with metadata + biomarkers.""" - rows = [] - meta = { - 'subject_id': payload.get('subject_id'), - 'session_nb': payload.get('session_nb'), - 'analysis_timestamp': payload.get('analysis_timestamp'), - 'site': payload.get('site'), - 'montage': payload.get('montage'), - 'n_trials_kept_overall': payload.get('n_trials_kept'), - 'pc_lag_ms_mean': payload.get('pc_lag_ms_mean'), - } - for ref_label, ref_block in (payload.get('references') or {}).items(): - if ref_block is None: - continue - row = dict(meta) - row['ref'] = ref_label - row['n_trials_kept'] = ref_block.get('n_trials_kept') - - iold = ref_block.get('iold') or {} - row['p100_left_ms'] = iold.get('p100_left_ms') - row['p100_right_ms'] = iold.get('p100_right_ms') - row['p100_left_uv'] = iold.get('p100_left_uv') - row['p100_right_uv'] = iold.get('p100_right_uv') - row['iold_ms'] = iold.get('iold_ms') - row['iold_flag'] = iold.get('flag') - - slope = ref_block.get('slope') or {} - row['slope_left'] = slope.get('slope_left_ms_per_arcmin') - row['slope_right'] = slope.get('slope_right_ms_per_arcmin') - row['slope_diff'] = slope.get('slope_diff') - - amp = ref_block.get('amplitude') or {} - row['amp_ratio'] = amp.get('ratio') - row['amp_log2'] = amp.get('log2_ratio') - - boot = ref_block.get('bootstrap') or {} - row['boot_iold_median'] = boot.get('iold_median_ms') - row['boot_iold_lo'] = boot.get('iold_ci_lo_ms') - row['boot_iold_hi'] = boot.get('iold_ci_hi_ms') - row['boot_left_lo'] = boot.get('left_p100_ci_lo_ms') - row['boot_left_hi'] = boot.get('left_p100_ci_hi_ms') - row['boot_right_lo'] = boot.get('right_p100_ci_lo_ms') - row['boot_right_hi'] = boot.get('right_p100_ci_hi_ms') - - hd_o1o2 = ref_block.get('hemi_delta_o1o2') or {} - row['delta_lat_o1o2'] = hd_o1o2.get('d_lat') - row['delta_log2_o1o2'] = hd_o1o2.get('d_log2') - - hd_p7p8 = ref_block.get('hemi_delta_p7p8') or {} - row['delta_lat_p7p8'] = hd_p7p8.get('d_lat') - row['delta_log2_p7p8'] = hd_p7p8.get('d_log2') - - comp_d = ref_block.get('composite_delta') or {} - row['composite_d_lat'] = comp_d.get('d_lat') - row['composite_d_log2'] = comp_d.get('d_log2') - - rows.append(row) - return rows - - -all_rows = [] -for jp in session_jsons: - with open(jp, 'r', encoding='utf-8') as f: - payload = json.load(f) - all_rows.extend(flatten_session(payload)) - -df = pd.DataFrame(all_rows).sort_values(['session_nb', 'ref']).reset_index(drop=True) -print(f"\n[load] longitudinal dataframe: {len(df)} rows, {len(df['session_nb'].unique())} sessions, " - f"{len(df['ref'].unique())} reference scheme(s)") -print(df[['session_nb', 'ref', 'n_trials_kept', 'iold_ms', 'slope_diff', - 'delta_lat_o1o2', 'delta_lat_p7p8']].to_string(index=False)) - -############################################################################### -# ## Trend figure -# -# Six panels: -# 1. IOLD over sessions, with bootstrap 95% CI band on the primary ref. -# ±8 ms clinical threshold drawn as horizontal guides. -# 2. Per-eye P100 latency, with bootstrap CI bands. -# 3. Check-size slope difference (L − R, ms / arcmin). -# 4. O1/O2 inter-ocular Δ-asymmetry (latency). -# 5. P7/P8 inter-ocular Δ-asymmetry (latency). -# 6. Inter-ocular amplitude ratio (log2). -# - -fig, axes = plt.subplots(2, 3, figsize=(18, 10)) -ax_iold, ax_p100, ax_slope, ax_d_o1o2, ax_d_p7p8, ax_amp = axes.flatten() - -ref_styles = { - PRIMARY_REF: dict(color='#2c3e50', linewidth=2.0, alpha=1.0, marker='o'), -} -# Lighter style for the secondary reference scheme. -for ref in df['ref'].unique(): - if ref != PRIMARY_REF: - ref_styles[ref] = dict(color='#95a5a6', linewidth=1.2, alpha=0.6, marker='s', linestyle='--') - -# --- 1. IOLD over time ----------------------------------------------------- -for ref, sub in df.groupby('ref'): - style = ref_styles.get(ref, dict(color='gray')) - ax_iold.plot(sub['session_nb'], sub['iold_ms'], label=f'{ref} (point)', **style) - if ref == PRIMARY_REF and sub['boot_iold_lo'].notna().any(): - ax_iold.fill_between(sub['session_nb'], sub['boot_iold_lo'], sub['boot_iold_hi'], - color=style['color'], alpha=0.15, label=f'{ref} (95% CI)') -ax_iold.axhline(8.0, color='#c0392b', linestyle=':', alpha=0.6, label='±8 ms clinical threshold') -ax_iold.axhline(-8.0, color='#c0392b', linestyle=':', alpha=0.6) -ax_iold.axhline(0, color='black', linestyle='-', alpha=0.3) -ax_iold.set_title('IOLD (L − R P100 latency) over sessions') -ax_iold.set_xlabel('Session number') -ax_iold.set_ylabel('IOLD (ms)') -ax_iold.grid(True, alpha=0.3) -ax_iold.legend(loc='best', fontsize=8) - -# --- 2. Per-eye P100 latency ---------------------------------------------- -for ref, sub in df.groupby('ref'): - style = ref_styles.get(ref, dict(color='gray')) - is_primary = (ref == PRIMARY_REF) - ax_p100.plot(sub['session_nb'], sub['p100_left_ms'], color='#2980b9', - marker='o' if is_primary else 's', - linestyle='-' if is_primary else '--', - alpha=style['alpha'], linewidth=style['linewidth'], - label=f'Left eye [{ref}]') - ax_p100.plot(sub['session_nb'], sub['p100_right_ms'], color='#c0392b', - marker='o' if is_primary else 's', - linestyle='-' if is_primary else '--', - alpha=style['alpha'], linewidth=style['linewidth'], - label=f'Right eye [{ref}]') - if is_primary and sub['boot_left_lo'].notna().any(): - ax_p100.fill_between(sub['session_nb'], sub['boot_left_lo'], sub['boot_left_hi'], - color='#2980b9', alpha=0.15) - ax_p100.fill_between(sub['session_nb'], sub['boot_right_lo'], sub['boot_right_hi'], - color='#c0392b', alpha=0.15) -ax_p100.set_title('Per-eye P100 latency over sessions') -ax_p100.set_xlabel('Session number') -ax_p100.set_ylabel('P100 latency (ms)') -ax_p100.grid(True, alpha=0.3) -ax_p100.legend(loc='best', fontsize=7) - -# --- 3. Check-size slope difference --------------------------------------- -for ref, sub in df.groupby('ref'): - style = ref_styles.get(ref, dict(color='gray')) - ax_slope.plot(sub['session_nb'], sub['slope_diff'], label=ref, **style) -ax_slope.axhline(0, color='black', linestyle='-', alpha=0.3) -ax_slope.set_title('Inter-ocular check-size slope difference (L − R)') -ax_slope.set_xlabel('Session number') -ax_slope.set_ylabel('Δ slope (ms / arcmin)') -ax_slope.grid(True, alpha=0.3) -ax_slope.legend(loc='best', fontsize=8) - -# --- 4. O1/O2 Δ-asymmetry -------------------------------------------------- -for ref, sub in df.groupby('ref'): - style = ref_styles.get(ref, dict(color='gray')) - ax_d_o1o2.plot(sub['session_nb'], sub['delta_lat_o1o2'], label=ref, **style) -ax_d_o1o2.axhline(0, color='black', linestyle='-', alpha=0.3) -ax_d_o1o2.set_title('O1/O2 inter-ocular Δ-asymmetry (latency)') -ax_d_o1o2.set_xlabel('Session number') -ax_d_o1o2.set_ylabel('Δlat (ms) — eye-dependent skew') -ax_d_o1o2.grid(True, alpha=0.3) -ax_d_o1o2.legend(loc='best', fontsize=8) - -# --- 5. P7/P8 Δ-asymmetry -------------------------------------------------- -for ref, sub in df.groupby('ref'): - style = ref_styles.get(ref, dict(color='gray')) - ax_d_p7p8.plot(sub['session_nb'], sub['delta_lat_p7p8'], label=ref, **style) -ax_d_p7p8.axhline(0, color='black', linestyle='-', alpha=0.3) -ax_d_p7p8.set_title('P7/P8 inter-ocular Δ-asymmetry (latency)') -ax_d_p7p8.set_xlabel('Session number') -ax_d_p7p8.set_ylabel('Δlat (ms) — eye-dependent skew') -ax_d_p7p8.grid(True, alpha=0.3) -ax_d_p7p8.legend(loc='best', fontsize=8) - -# --- 6. Amplitude ratio (log2) -------------------------------------------- -for ref, sub in df.groupby('ref'): - style = ref_styles.get(ref, dict(color='gray')) - ax_amp.plot(sub['session_nb'], sub['amp_log2'], label=ref, **style) -ax_amp.axhline(1.0, color='#c0392b', linestyle=':', alpha=0.6, label='±1 log2 threshold') -ax_amp.axhline(-1.0, color='#c0392b', linestyle=':', alpha=0.6) -ax_amp.axhline(0, color='black', linestyle='-', alpha=0.3) -ax_amp.set_title('Inter-ocular amplitude ratio over sessions') -ax_amp.set_xlabel('Session number') -ax_amp.set_ylabel('log2(L / R)') -ax_amp.grid(True, alpha=0.3) -ax_amp.legend(loc='best', fontsize=8) - -fig.suptitle(f'PR-VEP longitudinal trends — subject {SUBJECT_ID:04d}, {SITE}', - fontsize=14, fontweight='bold') -fig.tight_layout() -plt.show() - -############################################################################### -# ## Baseline summary -# -# Treat the first 3–5 sessions (or all sessions before a known intervention) -# as the baseline, and report the mean ± std of each biomarker. This bracket -# is what subsequent sessions need to fall outside of to count as a real shift. -# - -BASELINE_LAST_SESSION_NB = None # set to e.g. 4 to mark sessions <= 4 as baseline - -if BASELINE_LAST_SESSION_NB is not None: - baseline_mask = df['session_nb'] <= BASELINE_LAST_SESSION_NB -else: - baseline_mask = slice(None) - print("[baseline] BASELINE_LAST_SESSION_NB not set — using ALL sessions as baseline. " - "Edit the constant above to define a baseline window.") - -baseline_df = df.loc[baseline_mask] if BASELINE_LAST_SESSION_NB is not None else df -metrics = ['iold_ms', 'slope_diff', 'amp_log2', - 'delta_lat_o1o2', 'delta_lat_p7p8', - 'p100_left_ms', 'p100_right_ms'] - -primary = baseline_df[baseline_df['ref'] == PRIMARY_REF] -if len(primary) > 0: - print(f"\n[baseline] reference = {PRIMARY_REF}, n_sessions = {len(primary)}") - print(primary[metrics].agg(['mean', 'std']).T.to_string()) From 94bfe1ac1af3bfe5fcb834f6f7d30462f85fa609 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Fri, 15 May 2026 21:19:33 +1000 Subject: [PATCH 90/94] removed flip_time prototype --- eegnb/experiments/Experiment.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/eegnb/experiments/Experiment.py b/eegnb/experiments/Experiment.py index d6aeda2ae..2802e7440 100644 --- a/eegnb/experiments/Experiment.py +++ b/eegnb/experiments/Experiment.py @@ -605,16 +605,3 @@ def push_marker(self, marker, trial_idx): def name(self) -> str: """ This experiment's name """ return self.exp_name - import inspect - sig = inspect.signature(listener) - if 'flip_time' in sig.parameters: - listener(trial_idx, timestamp, flip_time=flip_time) - else: - listener(trial_idx, timestamp) - except Exception: - logger.exception("marker listener failed: %s", listener) - - @property - def name(self) -> str: - """ This experiment's name """ - return self.exp_name From 99190fbe22fe800af8455a189b0ab848df269567 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Fri, 15 May 2026 21:25:17 +1000 Subject: [PATCH 91/94] updated ordering --- .../visual_vep/00x__pattern_reversal_run_experiment.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index 48535e271..fce73a22e 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -42,7 +42,7 @@ # # Display: set use_vr=True for Meta Quest, False for monitor -use_vr = False +use_vr = True # Device: "cyton", "unicorn", "muse2", etc. device = "cyton" @@ -56,7 +56,7 @@ # 3D-printed mark-iv occipital array. Ground A2, Ref Fz. "thinkpulse-mark-iv": ["P7", "P8", "PO3", "PO4", "O1", "O2", "POz", "Oz"], # Standard 10-20 cap (Tencom 20-ch). Ground A2, Ref Fz. - "tencom-20-cap": ["P3", "P4", "P7", "P8", "Pz", "Oz", "O1", "O2"], + "cap": ["P7", "P8", "P3", "P4" "Pz", "Oz", "O1", "O2"], } # Personal monitor specs — refresh rate is used for the save path and for @@ -66,7 +66,7 @@ } # ---- pick montage and monitor for this session -------------------------- -montage_type = "thinkpulse-mark-iv" +montage_type = "cap" config = CYTON_CONFIG_GAIN_4X if montage_type == "thinkpulse-mark-iv" else None monitor_name = "acer-34-predator" @@ -74,7 +74,7 @@ # Subject and session identifiers subject_id = 0 -session_nb = 18 +session_nb = 19 ################################################################################################### # Initiate EEG device From 887359c83e7cda6f130b81f956714eca28de5ac9 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Fri, 15 May 2026 21:32:48 +1000 Subject: [PATCH 92/94] fixes --- eegnb/analysis/recording_quality.py | 2 +- examples/visual_vep/00x__pattern_reversal_run_experiment.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/eegnb/analysis/recording_quality.py b/eegnb/analysis/recording_quality.py index ab307a058..f8eba6d06 100644 --- a/eegnb/analysis/recording_quality.py +++ b/eegnb/analysis/recording_quality.py @@ -88,7 +88,7 @@ def _format_report(session_dir: pathlib.Path, per_channel: pd.DataFrame, summary: pd.DataFrame) -> str: """Format the structured DataFrames into the text report string.""" - lines = [] + lines: list[str] = [] w = lines.append if not recs: diff --git a/examples/visual_vep/00x__pattern_reversal_run_experiment.py b/examples/visual_vep/00x__pattern_reversal_run_experiment.py index fce73a22e..623559011 100644 --- a/examples/visual_vep/00x__pattern_reversal_run_experiment.py +++ b/examples/visual_vep/00x__pattern_reversal_run_experiment.py @@ -56,7 +56,7 @@ # 3D-printed mark-iv occipital array. Ground A2, Ref Fz. "thinkpulse-mark-iv": ["P7", "P8", "PO3", "PO4", "O1", "O2", "POz", "Oz"], # Standard 10-20 cap (Tencom 20-ch). Ground A2, Ref Fz. - "cap": ["P7", "P8", "P3", "P4" "Pz", "Oz", "O1", "O2"], + "cap": ["P7", "P8", "P3", "P4", "Pz", "Oz", "O1", "O2"], } # Personal monitor specs — refresh rate is used for the save path and for From e561fbf4c8d2b26ae6af842da51173eb15e4a747 Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sat, 16 May 2026 10:49:45 +1000 Subject: [PATCH 93/94] improve perf --- .../visual_vep/pattern_reversal_vep.py | 80 +++++++++---------- 1 file changed, 38 insertions(+), 42 deletions(-) diff --git a/eegnb/experiments/visual_vep/pattern_reversal_vep.py b/eegnb/experiments/visual_vep/pattern_reversal_vep.py index 714ff536c..3bfca6ce9 100644 --- a/eegnb/experiments/visual_vep/pattern_reversal_vep.py +++ b/eegnb/experiments/visual_vep/pattern_reversal_vep.py @@ -13,6 +13,9 @@ ISCEV_FIELD_DEG = 16.0 ISCEV_MEAN_LUM = 0.0 +VR_DIODE_BRIGHT = +1.0 +VR_DIODE_DARK = 0.0 + # Block conditions: 4 possible combinations of (eye, size) CONDITIONS = [ {'eye': 'left', 'size_name': 'large', 'size_idx': 0, 'check_deg': ISCEV_CHECK_DEG_LARGE}, @@ -133,26 +136,38 @@ def load_stimulus(self) -> Dict[str, Any]: width=self.window.size[0], height=self.window.size[1], fillColor='black', ) - # Photodiode target: square that toggles in lockstep with the - # checkerboard reversal phase. Drawn every frame; fillColor, size, - # and position are set per-frame in draw_frame(). Reversing (rather - # than pulsing) lets the diode trace mirror the reversal directly: - # a polarity flip on the diode = a checkerboard reversal at that - # exact frame, with no marker-vs-stimulus latency question. - # - # Flat-monitor patch is small and corner-positioned (visible screen, - # mustn't intrude on stimulus). VR patch is large and centred on the - # closed-eye buffer — the user can't see it, so a big centred patch - # makes diode placement forgiving (any position over the central lens - # area picks up the transitions). VR patch uses mid-grey ↔ light-grey - # instead of black ↔ white so any eye-pad seal failure exposes the - # eye to lower-amplitude reversing luminance. - self._flash_size_px = 100 # flat-monitor corner patch (px) - self._vr_patch_size_px = 1000 # VR centred patch (px square) - self.photodiode_patch = visual.Rect( + + self._flash_size_px = 100 # flat-monitor corner patch (px) + self._vr_patch_size_px = 1000 # VR centred patch (px square) + + if self.use_vr: + patch_size_px = self._vr_patch_size_px + bright_color = (VR_DIODE_BRIGHT,) * 3 + dark_color = (VR_DIODE_DARK,) * 3 + patch_pos = (0, 0) + else: + patch_size_px = self._flash_size_px + bright_color = (1, 1, 1) + dark_color = (-1, -1, -1) + bw, bh = self.window.size[0], self.window.size[1] + patch_pos = ( + (bw - patch_size_px) / 2, + -(bh - patch_size_px) / 2, + ) + + self.photodiode_patch_bright = visual.Rect( + self.window, + width=patch_size_px, height=patch_size_px, + units='pix', + fillColor=bright_color, + pos=patch_pos, + ) + self.photodiode_patch_dark = visual.Rect( self.window, - width=self._flash_size_px, height=self._flash_size_px, + width=patch_size_px, height=patch_size_px, units='pix', + fillColor=dark_color, + pos=patch_pos, ) def make_checker_stim(intensity_checks, check_deg, pos): @@ -302,15 +317,10 @@ def draw_frame(self, idx: int): eye, size_idx = c['eye'], c['size_idx'] phase = idx % 2 # alternates 0 / 1 for each reversal - if self.use_vr: - # Centred mid-grey ↔ light-grey patch on the closed-eye buffer: - # large enough that diode position over the central lens is - # uncritical, dim enough that an imperfect eye-pad seal exposes - # the eye to mild rather than full-contrast reversing luminance. - # PsychoPy normalised colours: -0.4 ≈ 30% grey, +0.4 ≈ 70% grey. - self.photodiode_patch.fillColor = (+0.4, +0.4, +0.4) if phase == 0 else (-0.4, -0.4, -0.4) - self.photodiode_patch.size = (self._vr_patch_size_px, self._vr_patch_size_px) + diode_patch = (self.photodiode_patch_bright if phase == 0 + else self.photodiode_patch_dark) + if self.use_vr: closed_eye = 'right' if eye == 'left' else 'left' self.window.setBuffer(eye) self.grey_background.draw() @@ -318,26 +328,12 @@ def draw_frame(self, idx: int): self.stim[eye]['fixation'].draw() self.window.setBuffer(closed_eye) self.black_background.draw() - self.photodiode_patch.pos = (0, 0) # centred on closed-eye buffer - self.photodiode_patch.draw() + diode_patch.draw() # centred on closed-eye buffer else: - # Flat monitor: small corner patch, full black ↔ white modulation - # (the diode sees the corner of the actual visible screen, so we - # want maximum contrast for SNR; the user fixates centre). - self.photodiode_patch.fillColor = 'white' if phase == 0 else 'black' - self.photodiode_patch.size = (self._flash_size_px, self._flash_size_px) - self.grey_background.draw() self.stim['monoscopic']['checkerboards'][size_idx][phase].draw() self.stim['monoscopic']['fixation'].draw() - # Bottom-right corner, flush against the screen edge — sit the - # photodiode sensor over this region. - bw, bh = self.window.size[0], self.window.size[1] - self.photodiode_patch.pos = ( - (bw - self._flash_size_px) / 2, - -(bh - self._flash_size_px) / 2, - ) - self.photodiode_patch.draw() + diode_patch.draw() self.window.flip() From 6dcaca94d98843471880a8a4aa5accc88d7e22bd Mon Sep 17 00:00:00 2001 From: Benjamin Pettit Date: Sat, 16 May 2026 10:50:17 +1000 Subject: [PATCH 94/94] fix quality check --- eegnb/analysis/recording_quality.py | 44 +++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/eegnb/analysis/recording_quality.py b/eegnb/analysis/recording_quality.py index f8eba6d06..7917ce19f 100644 --- a/eegnb/analysis/recording_quality.py +++ b/eegnb/analysis/recording_quality.py @@ -17,15 +17,22 @@ import numpy as np import pandas as pd +from scipy.signal import butter, sosfiltfilt EEG_CHANNEL_CANDIDATES = [ - 'Fz', 'Pz', 'P7', 'P8', 'O1', 'O2', 'Oz', 'M1', 'M2', + 'Fz', 'Pz', 'P3', 'P4', 'P7', 'P8', 'O1', 'O2', 'Oz', 'M1', 'M2', 'Cz', 'C3', 'C4', 'F3', 'F4', 'T7', 'T8', 'F7', 'F8', - 'AF7', 'AF8', 'TP9', 'TP10', + 'AF7', 'AF8', 'TP9', 'TP10', 'PO3', 'PO4', 'POz', 'PO7', 'PO8', ] -BIG_SAMPLE_UV = 200.0 +# AC-noise metrics (std, p99, max/min, pct_big) are computed on a high-pass- +# filtered copy of the signal so they reflect actual EEG noise rather than +# electrode half-cell DC offsets (typically 50-400 mV) and slow wander. +# The drift metric is computed on the unfiltered signal because slow wander +# is exactly what it's meant to detect. +HP_CUTOFF_HZ = 1.0 # high-pass before noise metrics +BIG_SAMPLE_UV = 200.0 # threshold for "%>200" (post high-pass) DRIFT_WIN_SECS = 10 NOISE_FACTOR_FLAG = 1.5 @@ -36,19 +43,34 @@ def _detect_sfreq(timestamps: np.ndarray) -> float: return float(1.0 / np.median(diffs)) if len(diffs) else 250.0 +def _highpass(x: np.ndarray, sfreq: float, cutoff_hz: float = HP_CUTOFF_HZ) -> np.ndarray: + """Zero-phase 4th-order Butterworth high-pass. Returns unchanged if signal + is too short for the filter.""" + nyq = sfreq / 2.0 + if cutoff_hz <= 0 or cutoff_hz >= nyq or len(x) < 32: + return x - np.mean(x) + sos = butter(4, cutoff_hz / nyq, btype='highpass', output='sos') + return sosfiltfilt(sos, x) + + def _channel_metrics(x: np.ndarray, sfreq: float) -> dict: - x = x - np.mean(x) + # Drift on the unfiltered signal — that's what it's measuring. + x_dc_removed = x - np.mean(x) win = max(1, int(DRIFT_WIN_SECS * sfreq)) - drift = float(pd.Series(x).rolling(win, center=False).mean().dropna().pipe( + drift = float(pd.Series(x_dc_removed).rolling(win, center=False).mean().dropna().pipe( lambda s: s.max() - s.min() - )) if len(x) >= win else 0.0 + )) if len(x_dc_removed) >= win else 0.0 + + # Noise metrics on the high-pass-filtered signal — these reflect AC EEG + # quality, not DC drift / wander (which is captured separately above). + x_ac = _highpass(x_dc_removed, sfreq) return { - 'std': float(np.std(x)), - 'p99': float(np.percentile(np.abs(x), 99)), - 'max': float(x.max()), - 'min': float(x.min()), + 'std': float(np.std(x_ac)), + 'p99': float(np.percentile(np.abs(x_ac), 99)), + 'max': float(x_ac.max()), + 'min': float(x_ac.min()), 'drift': drift, - 'pct_big': 100.0 * float(np.mean(np.abs(x) > BIG_SAMPLE_UV)), + 'pct_big': 100.0 * float(np.mean(np.abs(x_ac) > BIG_SAMPLE_UV)), }