Code Monkey home page Code Monkey logo

threebrain's Introduction

CRAN_Status_Badge license R-CMD-check Project Status: Active โ€“ The project has reached a stable, usable state and is being actively developed. DOI

Key Features:

  • Uses modern browsers, easy to embed and share
  • Displays MRI, surfaces, and electrodes in the same canvas
  • Maps multiple subjects on template brains using AFNI/SUMA (standard 141) or MNI-305 locations
  • Electrode localization
  • Volume rendering and surface/electrode animation
  • Integration with interactive R-shiny framework

News | reference page | keyboard shortcuts

System Requirement

  • Web Browsers: the viewer uses WegGL2 to render in browsers. Please check this list to see compatible browsers. As of 2023, Chrome, Firefox, Safari, and Edge (not IE) have full supports.

A. Installation

  1. R and RStudio Desktop (Free Version)
  2. Open RStudio, enter from its console:
install.packages("threeBrain")

If you want to install dev version from Github, then use:

install.packages("remotes")
remotes::install_github("dipterix/threeBrain")
  1. (Optional) Setups: after installation, in RStudio console, type the following command
threeBrain::brain_setup()

and follow the instructions.

B. Basic Brain Viewer

Once finishing setting up of threeBrain, there will be a template subject N27 (Collin's 27) created locally. The location is platform-related. You can find it by running the following command:

library(threeBrain)

default_template_directory()
#> [1] "/Users/dipterix/Library/Application Support/
#> org.R-project.R/R/threeBrain/templates"

N27 template folder resides inside of this directory.

Let's view this subject using the freesurfer_brain2 function.

  1. Import subject
library(threeBrain)

n27_path <- file.path(default_template_directory(), "N27")

x <- freesurfer_brain2( fs_subject_folder = n27_path,
  subject_name = 'N27', surface_types = 'pial')
  1. Visualize
plot(x)       # alternatively, you can use `n27$plot()`

C. Subject Setup

The sample subject (N27) is a sample generated by FreeSurfer (download). If you have any subjects processed by FreeSurfer, use function freesurfer_brain2 to visualize.

D. Add/Render Electrodes

If you have electrode file, you can import it before calling plot function. Please make sure it's in csv format.

x$set_electrodes(electrodes = "[PATH to ELECTRODE FILE]")

Here is an example of electrode csv file. Only the first five columns (case-sensitive) are mandatory: Electrode (integer), Coord_x, Coord_y, Coord_z, and Label (character). Coord_* is tkRAS location from FreeSurfer coordinates.

| Electrode| Coord_x| Coord_y| Coord_z|Label  | MNI305_x|  MNI305_y|  MNI305_z|SurfaceElectrode |SurfaceType | Radius| VertexNumber|Hemisphere |
|---------:|-------:|-------:|-------:|:------|--------:|---------:|---------:|:----------------|:-----------|------:|------------:|:----------|
|         1|    29.0|    -7.8|   -34.6|RMHCH1 | 30.46817| -17.98119| -23.40022|FALSE            |pial        |      2|           -1|left       |
|         2|    33.8|    -8.0|   -34.2|RMHCH2 | 35.57109| -17.76624| -22.80131|FALSE            |pial        |      2|           -1|left       |
|         3|    38.0|    -7.5|   -33.5|RMHCH3 | 39.97102| -16.81249| -22.17986|FALSE            |white       |      2|           -1|right      |
|         4|    42.6|    -6.8|   -33.0|RMHCH4 | 44.79092| -15.73442| -21.82591|FALSE            |smoothwm    |      2|           -1|right      |
|         5|    47.0|    -6.8|   -32.6|RMHCH5 | 49.45370| -15.35431| -21.31272|FALSE            |pial        |      2|           -1|right      |
|         ...

To assign values to electrodes, run

x$set_electrode_values(electrodes = "[PATH to ELECTRODE VALUE FILE]")

The electrode value file is also a csv like:

| Electrode| Subject| Project|    Time| ValueName| ValueName2|  ...|
|---------:|-------:|-------:|-------:|:---------|----------:|-----|
|         1|     N27|    Demo|       0|A         |   30.46817|  ...|
|         2|     N27|    Demo|       0|B         |   35.57109|  ...|
|         3|     N27|    Demo|       0|C         |   39.97102|  ...|
|         4|     N27|    Demo|       0|D         |   44.79092|  ...|
|         5|     N27|    Demo|       0|A         |   49.45370|  ...|
|         ...

Project and Time are optional. However, if you are also using rave, please make sure Project exists. If you want to show animation, Time is necessary and must be numeric. ValueName? can be any characters containing letters (A-Z, a-z), letters (0-9) and underscore (_).

E. Merge Subjects and Template mapping

If you have your own subjects with FreeSurfer output, for example, I have two subjects YAB and YCQ. To merge these two subjects and show them on N27 template,

library(threeBrain)

# yab = ... (see section B for import a single subject)
# ycq = ...
template_n27 = merge_brain(yab, ycq, template_subject = 'N27')

plot( template_n27 )

The viewer will be in N27 template, and electrodes of these two subjects can be mapped via MNI305 (for surface and stereo EEG) or std.141 (for surface-only).

F. Electrode Localization (YAEL)

YAEL: "Yet Another Electrode Localizer" is a module that has been integrated into RAVE (R Analysis and Visualization of iEEG). The paper will come out soon. Please contact RAVE team on how to localize electrodes.

Here is a sfN poster

Citation

To cite threeBrain in publications use:

Magnotti, J. F., Wang, Z., & Beauchamp, M. S. (2020). RAVE: Comprehensive open-source software for reproducible analysis and visualization of intracranial EEG data. NeuroImage, 223, 117341.

A BibTeX entry for LaTeX users:

  @Article{,
    title = {{RAVE}: Comprehensive open-source software for reproducible analysis and visualization of intracranial EEG data},
    author = {John F. Magnotti and Zhengjia Wang and Michael S. Beauchamp},
    journal = {NeuroImage},
    year = {2020},
    volume = {223},
    doi = {10.1016/j.neuroimage.2020.117341},
    pages = {117341},
  }

License

This package as a whole is licensed under GPL-3.0. The front-end viewer does not contain GNU components.

Explanation: The viewer is considered "data" and might not be abide by GPL-3.0 license. However, certain software scripts are linked by the viewers. These software scripts use quite permissive license. Please check LICENSE file for details.

threebrain's People

Contributors

dipterix avatar z94007 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.