Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The Google Summer of Code program provides a stipend for students who want to spend a summer contributing code to open-source projects. Open Ephys is applying as a mentoring organization in 2016. Below is a list of projects that would be extremely beneficial to our user base, and which could be completed in a 12-week period.

...

Open Ephys is looking for students to help us improve our GUI (http://www.open-ephys.org/gui/), an open-source data acquisition application used by neuroscientists across the globe. As a participant in GSoC, youYou'll have the opportunity to contribute code that will be applied to real experiments, as well as to learn the scientific motivations that drove us to create the GUI.

The only prerequisite is proficiency in C++, as demonstrated through coursework, code samples, and discussions with potential mentors. Experience with signal processing, data visualization, machine learning, embedded systems, and/or the Juce framework are may be helpful, but are not necessary. Our software runs on Windows, OS XMac, and Linux, so you'll be able to work with the OS of your choice.

...

1. Julia plugin module

Description: Description goes hereCreating custom processing modules for the Open Ephys GUI currently requires knowledge of C++. However, most scientists prefer to write code in high-level languages, such as Python and Matlab. Julia is a newly developed language for scientific computing that combines syntax of Matlab with the speed of compiled C++. It's easy to call Julia code from a C++ application using the Julia C++ interface. In order to take advantage of the vast amount of signal processing code that's been written by neuroscientists, and to make it easier for users to modify the GUI, we'd like to make it possible to run Julia code directly within our software. Julia modules could be used for such applications as detecting patterns in spiking activity or performing spectral analysis on neural signals. We already have a working prototype (https://github.com/open-ephys/gui/tree/jvoigts), but it needs to be made more robust and user-friendly.

Skills required:List skills Proficiency with C++, especially integrating with other languages

Mentor: Jakob Voigts (@jvoigts)


2. TriggeredEvent-triggered averaging module

Description: Description goes hereOne of the most important paradigms in neuroscience involves computing the average neural response to multiple presentations of the same environmental stimulus. This type of analysis is typically done offline, but it's often more convenient to measure the average response in real time. Open Ephys users would greatly benefit from having a plugin module that could align data to external events, and display both the individual trials and the average in an elegant way. This could be part of the existing LFP Viewer, or part of a separate processor. The module should be flexible enough to trigger only on certain types of events, and to work with multiple user-defined channel groups simultaneously. Ideally, the plugin would also perform simple analyses: e.g., computing the maximum, minimum, and standard deviation of the trigger-aligned data.

Skills required: List skillsProficiency in C++, basic signal processing background

Mentor: Josh Siegle (@jsiegle)

...

3. Plugin generation GUI

Description: Basic plugin should build on/refactor existing LFP viewer, and handle time series data, allow scrolling back trough past data. Plugin should handle stacks of triggered time-point aligned data. This should be flexible enough to trigger only on certain events, and handle subsets of channels etc. Plugin should then apply analyses on the time-point aligned data: average+quantiles/std, time-frequency analysis, etc.Skills required: List skills The Open Ephys GUI is based on a host–plugin architecture, in which processing modules are compiled separately from the main application and can be loaded on the fly. This makes it easier for users to add new functionality: they only need to understand the interface for piping data in and out of a processor, rather than the inner workings of the entire application. Nevertheless, there are still a number of mundane steps that must be carried out before one can start writing code for processing data. We'd like to have these steps be done automatically, guided by a graphical interface. The user would type in a name for their processor, and select some basic attributes, and it would generate all the necessary files and some boilerplate code. The interface could either be standalone, or integrated into the main GUI. This would help lower the barrier for entry for scientists interested in upgrading the GUI's functionality.

Skills required: Proficiency in C++, experience designing robust user interfaces

Mentor: Josh Siegle (@jsiegle)

...

Description: When running any type of experiment with freely behaving animals, it's often important to know what behaviour the animal is engaged in at any a given time. For instance, mice could be walking around, eating, grooming, sleeping, or standing up to explore some objects, etc. For some of these, capturing video is an easy way to get at the basic location of the animal, but for their environment. Video capture can tell us roughly where an animal is located and where it's moving, but determining whether a mouse is sitting still or , sleeping or , eating is very hard difficult with cameras. However, most of the head-stages that Open Ephys users would use on these experiments come with image data alone. The headstages used by Open Ephys to acquire neural data also include small accelerometers that give constantly continuously sampled 3d- 3D acceleration data. Mining this data to determine the behavioural state of the animal (mice or rats) in real-time would enable scientists to perform much more targeted experiments. We're looking for someone to create a plugin module for the Open Ephys GUI that takes 3 channels of accelerometer data and classifies it into discrete states that correspond to different behavioral states of an animal.

Skills required: Proficiency in C++, plus knowledge of basic machine learning algorithms (to be implemented in Python, Julia, or C++)

...

5. OpenBCI integration

Description: Description goes here.OpenBCI is a widely used 

Skills required: List skillsProficiency in C++, familiarity with microcontrollers and embedded systems

Mentor: Josh Siegle (@jsiegle)

...