Attention: The EBRAINS IAM will be down Monday, the 21st July 2025, from 17.00 CEST (my timezone) for up to 1 hour. This will any affect services requiring an EBRAINS login, we apologise for any inconvenience caused.


Wiki source code of Widget 3D Head

Version 21.1 by paulapopa on 2023/03/01 17:12

Show last authors
1 Source code: [[https:~~/~~/github.com/the-virtual-brain/tvb-widgets>>https://github.com/the-virtual-brain/tvb-widgets]]
2
3 Immediate testing: [[https:~~/~~/lab.ch.ebrains.eu/hub/user-redirect/lab/tree/shared/TVB%20Widgets/REPO/tvb-widgets/notebooks/HeadWidget.ipynb>>https://lab.ch.ebrains.eu/hub/user-redirect/lab/tree/shared/TVB%20Widgets/REPO/tvb-widgets/notebooks/HeadWidget.ipynb]]
4
5 == Purpose ==
6
7 It is a Jupyter widget intended for visualization of the 3D Head data available for a patient:
8
9 * surfaces of different types (cortex, face, skull, etc)
10 * connectivity region centers
11 * sensors locations (SEEG, MEG, EEG)
12
13 == Inputs ==
14
15 It supports the above data in the form of their corresponding TVB datatypes:
16
17 * Surface (CorticalSurface, FaceSurface, etc)
18 * Connectivity
19 * Sensors (SensorsInternal, SensorsMEG, SensorsEEG)
20
21 == Installation ==
22
23 (% class="box" %)
24 (((
25 pip install tvb-widgets
26 )))
27
28 == API usage ==
29
30 We need to first import the widget __API from tvbwidgets__// //package, together with the __TVB API __and the __display__ function:
31
32 (% class="box" %)
33 (((
34 import tvbwidgets.api as api
35
36 from tvb.simulator.lab import *
37
38 from IPython.core.display_functions import display
39 )))
40
41 Then, there are 2 options to work with the widget:
42
43 1. Use a file browser to load the data and automatically display it
44 1. Use directly the API to load the data and display it
45
46
47 For the first option, you have to run the following 2 lines of code in a notebook cell and then just use the UI controls:
48
49 (% class="box" %)
50 (((
51 widget = api.HeadBrowser()
52 display(widget)
53 )))
54
55 {{html}}
56 <iframe src="https://drive.google.com/file/d/1lY3X5eqJfOLmkmHuBa2iq_Aas8mDPa1e/preview" width="840" height="480" allow="autoplay"></iframe>
57 {{/html}}
58
59
60 For the second option, the API is described below:
61
62 In a new cell, we instantiate the **HeadWidget** and a **FaceSurface** datatype that we want to visualize. Using the //**add_datatype**// method we add the surface to our widget and __display__ the widget:
63
64 (% class="box" %)
65 (((
66 widget = api.HeadWidget()
67
68 face = surfaces.FaceSurface().from_file()
69
70 face.configure()
71
72 widget.add_datatype(face)
73 display(widget)
74 )))
75
76 {{html}}
77 <iframe src="https://drive.google.com/file/d/1Egp9Lk-HGMATc9em6Kw_jSHmybTD2vzM/preview" width="840" height="480" allow="autoplay"></iframe>
78 {{/html}}
79
80 Next, we can continue adding other datatypes to this widget, by calling //**add_datatype**// multiple times. A maximum of 10 datatypes are supported by this widget.
81
82 The **Config** object can be used to tweak the display options for each datatype.
83
84 In the code below, we add a **Connectivity** and SEEG **Sensors:**
85
86 (% class="box" %)
87 (((
88 conn = connectivity.Connectivity().from_file()
89
90 conn.configure()
91
92 widget.add_datatype(conn)
93
94
95 seeg = sensors.SensorsInternal().from_file()
96
97 seeg.configure()
98
99 widget.add_datatype(seeg, api.HeadWidgetConfig(name='SEEG'))
100 )))
101
102 {{html}}
103 <iframe src="https://drive.google.com/file/d/1RLwts75Hh31LoPdWLK7QOM61KIsOabF1/preview" width="840" height="480" allow="autoplay"></iframe>
104 {{/html}}
105
106 We can also provide a **RegionMapping** to be used as colormap for a surface:
107
108 (% class="box" %)
109 (((
110 reg_map = region_mapping.RegionMapping.from_file()
111
112 config = api.HeadWidgetConfig(name='Cortex')
113
114 config.add_region_mapping_as_cmap(reg_map)
115
116
117 cortex = surfaces.CorticalSurface().from_file()
118
119 cortex.configure()
120
121
122 widget = api.HeadWidget()
123
124 widget.add_datatype(cortex, config)
125
126 display(widget)
127 )))
128
129 {{html}}
130 <iframe src="https://drive.google.com/file/d/1zrbjdb8Y4V5rqg7Y7LDGlHHMS0RH8luz/preview" width="840" height="480" allow="autoplay"></iframe>
131 {{/html}}
Public

TVB Widgets