Skip to content

GSoC Ideas

Daniel McCloy edited this page Mar 24, 2023 · 37 revisions

MNE-Python

MNE-Python is planning to participate in the GSOC 2023 under the 🐍 Python Software Foundation (PSF) umbrella.

Note: If you are not currently pursuing research activities in MEG or EEG and do not use or do not plan to use MNE-Python for your own research, our GSoC might not be for you. Our projects require domain-specific interest and are not simple coding jobs.

About MNE-Python

MNE-Python is a pure Python package for preprocessing and analysis of M/EEG data. For more information, see our homepage.

Contact

For modes of communication see our getting help page. It's a good idea to introduce yourself on our Discourse forum to get in touch with potential mentors before submitting an application.

Getting Started

Writing your GSoC application

Additional reading

Project ideas

We list some potential project ideas below, but we welcome other ideas that could fit within the scope of the project!

1a. Improve raw data browsing (pyqtgraph)

Difficulty

Medium

Project length

350 hours

Possible mentors

Alex Gramfort, Eric Larson, Dan McCloy

Goal

mne-qt-browser is a modern eletrophysiology browser based on Qt. It offers fast visualization of raw, epochs, and ICA time courses. However, there are many UI and usability improvements that could be added.

Subgoals

  • Improve the overview bar
  • Enable interactive switching between time courses and STFT/spectrogram view for individual traces, including UI elements to control various parameters (clim, cmap, n_fft, etc.)
  • Add a two-control "time slider" and/or "channel slider" that allows setting the time span and channel span to show
  • Optionally, add text overlays for each channel giving their value at the current time point (continuously updating)
  • Add the possibility to load a file from the UI (add button or menu) or to simple drop a file in the window to view it
  • Multiple other ideas on this project page

1b. Improve raw data browsing (matplotlib)

Difficulty

Medium

Project length

350 hours

Possible mentors

Alex Gramfort, Eric Larson, Dan McCloy

Goal

The newer pyqtgraph-based data browser in 1a is modeled on our original Matplotlib-based browser. The Matplotlib data browser is better tested and more feature-complete, but less performant than its pyqtgraph-based counterpart. The main goal is to improve rendering speed. Secondary goals include re-working some of the dialog windows to leverage modern matplotlib capabilities, and adding a zoom-to-rectangle feature.

Subgoals

2. Event system for brain and evoked plots

Difficulty

Medium

Project length

350 hours

Possible mentors

Alex Gramfort, Eric Larson

Goal

We have an excellent 3D viewer for brain activations, and multiple ways of viewing evoked data (plot_topo, plot_topomap, plot_joint, etc.). We want to integrate these so that you can, for example, click on a time point in a Brain and have the evoked.plot_topomap update. This should be done using callbacks to allow for customizability.

Subgoals

  • Design and implement a callback system for Brain and time-based viewers (plot_topo, plot_topomap, plot_joint, etc.)
  • Provide a simple API for hooking
  • Possibly allow passing an (evoked, inv) pair to Brain to generate source time courses on the fly
  • Possibly allow integrating the evoked.plot_* matplotlib figures into the brain viewer directly (this is a UI design problem mostly: should it use tabs, or something else?)

3. Eye-tracking data support

Difficulty

Medium

Project length

175 or 350 hours

Possible mentors

Alex Gramfort, Eric Larson, Dan McCloy

Goal

MNE-Python has a PR open to add Eyelink data reading and channel types. After this is merged (possibly with GSoC help!), standard eye-tracking data preprocessing, regression, and visualization methods will be needed. This requires some domain-specific knowledge, i.e., some experience with eye-tracking data collection and analysis.

Subgoals

Any of the following would be helpful:

  • Finish data reading PR
  • Add any necessary preprocessing functions (interpolation during blinks, etc.)
  • Extend support and add an example of using linear regression / deconvolution with a suitable pupil kernel and/or kernel estimation
  • Adapt any other necessary code from the obsolete pyeparse