brainhackorg / global2022

Github repo for the brainhack 2022 website and event
https://brainhack.org/global2022/
MIT License
3 stars 6 forks source link

Neurodata Without Borders Viewer #171

Open Remi-Gau opened 1 year ago

Remi-Gau commented 1 year ago

Added as an issue for book keeping

Source: https://brainhack.ch/

Team Leaders:

Anıl Tuncel This project puts equal weights on learning and building. While working on this project, we will learn the most loved programming language of our time [3] and build something useful for the neuroscience community with it.

Neurodata Without Borders (NWB) [1] is a standard data format to represent neurophysiology data files. It enables interoperability between neurophysiology data produced by different neuroscience labs. Examples of the data stored in .NWB format range from patch clamp experiments to optical physiology experiments. The Blue Brain Project uses the standard NWB format to store and share the electrophysiology data such as the ion-channels data available on Blue Brain Channelpedia [10].

The underlying storage technology used by the NWB format is the binary HDF [2] format. While storing the files as binary brings advantages on the read/write speed as well as the file size, it stores the data in a way that is not readable by humans. I.e. one cannot open the file in a text editor to see the contents, thus there is need for a viewer.

There exists a viewer software (written in Java) for viewing the HDF files however it does not meet the specific needs of the NWB user as it's not tailored for the neuroscientists. There also exists web services to view the NWB files however they require the users to upload the files to their servers in order to view them.

The NWB View project should be able to run offline, enabling researchers to view their files without relying on web services for both privacy and usability reasons. The project should also run fast and consume little memory since the data stored in NWB files can be vast.

This bring us to Rust. Rust is a language empowering everyone to build reliable and efficient software. It is built to be a language for the next 40 years. For the seventh year, Rust has been named the most loved language in Stack Overflow's Developer Survey [3]. Microsoft Azure's CTO said it is time to halt starting new projects in C/C++ and use Rust [4]. Linus Torvalds announced that Rust will be a part of Linux Kernel [5]. Rust is the most popular language for the WebAssembly [7] and thus it will be important for the future of web development.

Rust is also important for the Python developers. An implementation of Python exists in Rust that allows running Python in the web browser [8]. Besides, there are many Rust-backed Python libraries. Some programming languages are being developed to bring Rust features to Python use-cases [9].

The bioinformatics community is moving to Rust [6]. Neuroscience community can also benefit from a similar move.

Knowing Rust is already a highly valuable asset today and it going to be even more important in the future.

In this project, while learning Rust, we are going to build a simple graphical user interface (GUI) in Rust to display NWB files. There exists powerful GUI libraries in Rust mature enough for building the NWB viewer. The screenshot taken shows the capabilities of the EGUI library.

Some of our requirements are the following.

Displaying the current and voltage traces from a patch clamp experiment.

Displaying the contents of the NWB file e.g. the stimuli applied to the cell.

Computing and displaying statistics about the cell's voltage. E.g. resting membrane potential.

Approximately computing the rheobase of the cell and displaying it.

Displaying the experimental notes in the tabular view.

For this we need the software developers, neuroscientists and it would be great to have at least one person with design and aesthetic skills. :)

https://www.nwb.org/

https://en.wikipedia.org/wiki/Hierarchical_Data_Format

https://www.reddit.com/r/rust/comments/vi7pre/rust_tops_stackoverflow_survey_2022_as_the_most/

https://twitter.com/markrussinovich/status/1571995117233504257

https://www.techspot.com/news/96037-rust-programming-language-join-linux-kernel.html

Köster, Johannes. "Rust-Bio: a fast and safe bioinformatics library." Bioinformatics 32.3 (2016): 444-446.

https://www.infoworld.com/article/3665128/rust-is-most-popular-webassembly-language-survey-says.html

https://github.com/RustPython/RustPython

https://github.com/erg-lang/erg

https://portal.bluebrain.epfl.ch/resources/data/ion-channels/