Developer Documentation
Welcome to the developer documentation for Neuralyzer. This is a C++ project for data analysis and visualization focused on the multi-modal data found in Systems Neuroscience. While higher level languages like MATLAB or Python are more common in our field, C++ was selected for this package to hide the programming aspects from the average user so that it “just works”. However, if you are here, you most likely want to try to modify Neuralyzer in some way. If you are new to C++, I have collected resouces that helped me to learn in the Intro to C++ section.
The Build Instructions section has a guide with getting an operational, developmental version of Neuralyzer on your own machine.
Once you have a working version of Neuralyzer, I recommend checking out the design guidelines and code quality section. It contains the design specifications and rules for writing C++ code for this project. It also contains descriptions of some of the tooling that can do most of this for you.
For starting projects, I recommend looking into four separate initiatives to ensure Neuralyzer remains performant and robust. These are good starting points to learn more about how Neuralyzer works under the hood:
- Testing: Unit tests are critical for ensuring that code changes do not break existing functionality. This section describes the testing framework and guidelines for writing tests.
- Profiling and Performance: Profiling tools can help identify performance bottlenecks in the code. This section describes how to use profiling tools to optimize code performance.
- Static Analysis: Static analysis tools can help identify potential issues in the code before they become problems. This section describes how to use static analysis tools to improve code quality.
- Fuzzing: Fuzzing is a technique for testing software by providing random inputs to the program. This section describes how to use fuzzing to identify bugs in the code or unexpected edge cases in complex algorithms.
Neuralyzer has many moving parts. There are multiple libraries that encapsulate different features that are maintained as part of this project. It is worth being familiar with some of these:
- CoreGeometry:
- CorePlotting: This is the backend agnostic plotting interface for
- Entity:
- TimeFrame:
- PlottingOpenGL:
- ObserverData:
- SpatialIndex:
Data is loaded and managed by the DataManager class. The DataManager also currently contains some modular components like
- Data Transformation Architecture:
Finally, UI elements
DataViewer Widget:
Spatial Overlay Widget
Event Plot
Scatter Plot
Line Event Plot
Media Widget
Data Transform Widget
Data Manager Widget