Wiki source code of Extension tvb-ext-xircuits

Version 73.6 by teodoramisan on 2026/02/13 09:18

Hide last authors
ldomide 1.1 1 Source code: [[https:~~/~~/github.com/the-virtual-brain/tvb-ext-xircuits>>https://github.com/the-virtual-brain/tvb-ext-xircuits]]
2
ldomide 28.1 3 Release on Pypi: [[https:~~/~~/pypi.org/project/tvb-ext-xircuits/>>https://pypi.org/project/tvb-ext-xircuits/]]
4
ldomide 55.1 5 This extension is also installed already in EBRAINS lab, where it can be tested directly.
6
teodoramisan 73.3 7 == Jupyter Lab Extension for building and executing TVB and VBI Workflows on EBRAINS ==
ldomide 1.1 8
rominabaila 2.1 9 == Purpose ==
ldomide 1.1 10
paulapopa 73.1 11 This is a Jupyter Lab extension that offers graphical support for TVB and VBI workflows. It is already available in the EBRAINS Lab and it allows users to configure and execute TVB simulations and VBI inference workflows directly from a GUI, while drastically reducing the complexity of configuring them inside a Jupyter Lab notebook.
rominabaila 3.1 12
paulapopa 56.1 13 {{html}}
14 <iframe width="1200" height="450" src="https://www.youtube.com/embed/-cjZOsU6PBg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
15 {{/html}}
16
rominabaila 14.1 17 == Acknowledgements ==
18
teodoramisan 64.1 19 This extension is build on top of the [[Xircuits Jupyter extension>>https://xircuits.io/]], but it also comes with custom functionalities, specifically designed for TVB, VBI and EBRAINS. These functionalities are detailed in a section below.
rominabaila 14.1 20
rominabaila 3.1 21 == Installation ==
22
paulapopa 44.1 23 The extension can be installed using the official PyPi distribution ([[https:~~/~~/pypi.org/project/tvb-ext-xircuits/>>https://pypi.org/project/tvb-ext-xircuits/]]):
rominabaila 3.1 24
25 (% class="box" %)
26 (((
27 pip install tvb-ext-xircuits
28 )))
29
rominabaila 9.1 30 After installing the extension and opening a Jupyter Lab session, you should be able to see in the left panel of Jupyter Lab a new icon, which represents the Xircuits components tray:
rominabaila 4.1 31
paulapopa 31.1 32 [[image:side.png]]
rominabaila 9.1 33
rominabaila 13.1 34 == **Usage** ==
rominabaila 4.1 35
rominabaila 12.1 36 === **Step 1. Create a new Xircuits workflow** ===
rominabaila 10.1 37
paulapopa 43.1 38 From the Jupyter Lab launcher, click on the **Xircuits File** icon, as in the screenshot below.
rominabaila 10.1 39
teodoramisan 66.1 40 [[image:xircuits-file-icon.png||alt="newxircs.png" height="592" width="1100"]]
paulapopa 43.1 41
42 A new file with the .xircuits extension will be generated under your current working directory. This is where you can start building the workflow diagram interactively.
43
teodoramisan 66.1 44 [[image:xircuits-generated-file.png||alt="newfile.png" height="592" width="1100"]]
paulapopa 43.1 45
46 You will notice that 2 components are already placed inside the workflow: the __Start__ and the __Finish__ components. They cannot be modified or deleted, and they represent the starting and finishing point of the workflow.
47
rominabaila 12.1 48 === **Step 2.  Drag components into the workflow area** ===
rominabaila 10.1 49
paulapopa 43.1 50 Open the components tray, from the left-side bar icon highlighted below.
rominabaila 10.1 51
teodoramisan 66.1 52 [[image:xircuits-extension-icon.png||alt="tray.png" height="591" width="1100"]]
paulapopa 43.1 53
54 Now, you can browse through the components, select the one you wish to use, then drag and drop it into the workflow area.
55
teodoramisan 65.1 56 Customizable components can be identified by a suffix (e.g. **TVB_**SIMULATOR, **VBI_**SIMULATION_RUNNER).
57
teodoramisan 66.1 58 [[image:xircuits-component-browser.png||alt="components.png" height="592" width="1100"]]
paulapopa 43.1 59
rominabaila 12.1 60 === **Step 3. Configure the components** ===
rominabaila 10.1 61
paulapopa 43.1 62 The components that are provided in this extensions are configurable, meaning you can set some parameters on almost every component. Some of the parameters are literals, while some parameters are results of other components.
rominabaila 12.1 63
teodoramisan 67.2 64 Parameters marked with a star (★) are mandatory, the workflow will not run until all required parameters have values assigned.
teodoramisan 65.1 65
paulapopa 43.1 66 In case of primitives you need to open the //General// tab from the components tray and drag the appropriate //literal//: float, int, string, dict, etc.
67
68 The parameters need to be linked to the inputs of the component by dragging and dropping a connection from the output port of a literal/component towards the corresponding input port of the other component (e.g. the gray connections in the screenshot below).
69
teodoramisan 67.3 70 Components and parameters include info buttons (**i**) that explain their purpose and how they are used (e.g. the simulator info panel below).
teodoramisan 65.1 71
teodoramisan 66.1 72 [[image:Screenshot 2026-02-12 115445.png||alt="diagr.png" height="592" width="1100"]]
paulapopa 43.1 73
rominabaila 12.1 74 === **Step 4. Make connections** ===
75
paulapopa 43.1 76 After dragging all your desired components/literals in the workflow area, it's time to connect the components.
rominabaila 12.1 77
paulapopa 43.1 78 First, link the __Start__ node to the first component of your workflow. Then make the connections between all your components. The last component should be linked to the __Finish__ node, to indicate the end of your workflow (e.g. the blue connections in the screenshot below). These connections will dictate the order of execution of the components in your workflow.
rominabaila 12.1 79
teodoramisan 66.1 80 [[image:components-connection.png||alt="diagram.png" height="592" width="1100"]]
paulapopa 43.1 81
rominabaila 12.1 82 === **Step 5. Run the workflow** ===
83
paulapopa 54.1 84 After connecting everything, you need to run the workflow to actually see its results.
rominabaila 12.1 85
paulapopa 54.1 86 There are 2 ways to run the workflow in EBRAINS Lab:
87
88 ~1. Locally:
89
90 * For this you can click on the Run button (▶), which will also implicitly compile the workflow. Make sure that __Local Run__ is selected near the Run button.
91
teodoramisan 66.1 92 [[image:local-run-button.png||alt="run.png" height="592" width="1100"]]
paulapopa 43.1 93
paulapopa 54.1 94
95 2. Remotely on HPC (only if you have access to HPC resources)
96
97 * First choose the __Remote Run__ in the select box and then click the Run button (▶), which will also implicitly compile the workflow.
98
teodoramisan 66.1 99 [[image:remote-run-button.png||alt="remote.png" height="385" width="1100"]]
paulapopa 54.1 100
101 * A dialog will open to request the HPC connection details:
102 ** which __HPC Site__ to use
103 ** the name of the __HPC Project/Account__ you have access to
104 ** one checkbox to choose whether you want the __HPC Monitoring__ to be opened up automatically (via tvb-ext-unicore GUI). This can also be opened up manually using the __Monitor HPC__ button or the __U__ icon from the left side-bar.
105 ** one checkbox to choose whether you want the results to be __staged out__ automatically or not. If checked, the workflow waits for the HPC jobs to finish and then performs the stage out. If unchecked, the results can be manually downloaded later on by using the GUI of the tvb-ext-unicore.
106
teodoramisan 66.1 107 [[image:remote-run-configuration.png||alt="rem.png" height="591" width="1100"]]
paulapopa 54.1 108
109 * The HPC monitoring is done via the GUI of tvb-ext-unicore which is a separate package we have documented under this Wiki. But it can be nicely used together with tvb-ext-xircuits:
110
teodoramisan 66.1 111 [[image:hpc-monitoring.png||alt="uni.png" height="593" width="1100"]]
paulapopa 54.1 112
113
rominabaila 12.1 114 After clicking on Run, a new Jupyter Output window should appear in the bottom of your Jupyter Lab environment. Here you will see the output of your workflow, such as logs, static plots, etc.
115
teodoramisan 66.1 116 [[image:jupyter-output-window.png||alt="out.png" height="591" width="1100"]]
paulapopa 43.1 117
rominabaila 12.1 118 === **Step 6. Share your work*** ===
119
120 This step is, of course, optional, but it is worth mentioning that sharing your workflows with others is extremely easy. By just saving and sharing your workflow (*.xircuits) file, anyone can access the entire workflow, see the exact connections that you made and receive the same configuration for the components.
121
rominabaila 15.1 122 == Custom functionalities ==
rominabaila 12.1 123
rominabaila 15.1 124 As mentioned before, besides all the core functionalities provided by Xircuits, some other functionalities were added to better suit the needs of the EBRAINS users.
125
paulapopa 54.1 126 === 1. Configure TVB models using the Phase Plane widget ===
rominabaila 15.1 127
128 This functionality was added to make it easier for users to provide the correct parameters to TVB models, using the Phase Plane widget.
129
rominabaila 20.1 130 To use this functionality, drag any model from the **TVB_MODELS** (inside the components tray) into the workflow area. Then right click on the model and select the **Open Viewer** option:
rominabaila 15.1 131
rominabaila 20.1 132
teodoramisan 67.1 133 [[image:open-viewer-on-models.png||alt="image-20221116125354-2.png" data-xwiki-image-style-alignment="center" height="593" width="1100"]]
rominabaila 20.1 134
135
136 A new Jupyter tab should open, which contains a read-only Jupyter notebook. After following the instructions provided there, you should be able to see the Phase Plane widget associated with this particular model.
137
teodoramisan 60.1 138 [[image:image-20221116125822-1.png||data-xwiki-image-style-alignment="center" height="800" width="821"]]
rominabaila 20.1 139
140 After configuring the parameters with the desired values, go to the Exports tab of the widget and click on **Export model configuration**. Now all you have to do is to go back to the tab where your workflow is and you will see that the model will have values set for all the parameters that you modified in the Phase Plane widget (that is all the parameters there were assigned values different than the default ones).
141
teodoramisan 67.1 142 [[image:export-model-configuration.png||alt="image-20221116130425-1.png" data-xwiki-image-style-alignment="center" height="763" width="1000"]]
rominabaila 20.1 143
144
teodoramisan 72.1 145 === 2. Visualize time series resulted from TVB simulations ===
paulapopa 54.1 146
paulapopa 58.1 147 This functionality is available for the **StoreResultsToDrive** component. Right click on the **StoreResultsToDrive** and select the **Open Viewer** option:
paulapopa 54.1 148
teodoramisan 67.1 149 [[image:open-viewer-button.png||alt="view.png" height="591" width="1100"]]
paulapopa 54.1 150
paulapopa 58.1 151 A new Jupyter tab should open, which contains a read-only Jupyter notebook. After running the cell, you should be able to see the **TimeSeriesBrowser **widget with the //**Collab**// and //**folder**// you have chosen for the **StoreResultsToDrive **component already loaded.
paulapopa 54.1 152
teodoramisan 67.1 153 [[image:view2.png||height="576" width="1100"]]
paulapopa 54.1 154
paulapopa 58.1 155 Next, you should choose which time series file to display and click the **View time series button**.
paulapopa 54.1 156
teodoramisan 67.1 157 [[image:timeseries-plotly.png||alt="view3.png" height="593" width="1100"]]
paulapopa 54.1 158
teodoramisan 73.4 159 === 3. Visualize posterior pairplot resulted from an inference workflow ===
160
161 This functionality is available for the SamplePosterior component. Right click on the component and select the Open Viewer functionality.
162
163 This opens a new JupyterLab tab with an editable notebook. After following the instructions in the notebook, you will generate a pairplot of the posterior samples, showing the distribution of each parameter (uncertainty) and the relationships between parameters.
164
165 *Make sure the workflow has been executed so the viewer has data to load.
166
teodoramisan 73.5 167 [[image:plot-posteriors.png||height="593" width="1100"]]
168
teodoramisan 73.6 169 === 4. Visualize time series resulted from VBI simulations ===
170
171 This functionality is available for the SimulationRunner component. Right click on the component and select the Open Viewer functionality.
172
173 This opens a new JupyterLab tab with an editable notebook. After following the instructions in the notebook, you will see a simple time-series plot of the simulated model signal over time.
174
175 *Make sure the workflow has been executed so the viewer has data to load.
176 [[image:plot-timeseries-vbi.png||height="592" width="1100"]]
177
paulapopa 57.1 178 == ==
paulapopa 54.1 179
rominabaila 21.1 180 == Workflow examples ==
rominabaila 20.1 181
rominabaila 25.2 182 (((
183 === 1. Full TVB Simulation workflow ===
184 )))
rominabaila 25.1 185
teodoramisan 69.1 186 Contains all TVB components necessary for running a TVB simulation (e.g., connectivity, coupling, model, integrator, monitor, simulator).
rominabaila 25.1 187
rominabaila 25.2 188 {{html}}
paulapopa 57.1 189 <iframe width="1280" height="720" src="https://www.youtube.com/embed/bmqPlIJsWLk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
rominabaila 25.2 190 {{/html}}
191
teodoramisan 69.1 192 === 2. Full VBI Inference workflow ===
rominabaila 25.2 193
teodoramisan 69.1 194 Contains all VBI components required to run an inference workflow (e.g., inference configuration, model, simulator, train posterior, sample posterior).
rominabaila 25.2 195
teodoramisan 69.1 196 [[image:vbi_workflow.png||height="590" width="1100"]]
197
198 === 3. Configuring model parameters using the PhasePlaneWidget: ===
199
rominabaila 25.2 200 Same workflow as before, but the parameter for the model used in simulation are set using the PhasePlaneWidget.
201
rominabaila 26.1 202 {{html}}
paulapopa 57.1 203 <iframe width="1280" height="720" src="https://www.youtube.com/embed/jhGfYul1z9k" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
rominabaila 26.1 204 {{/html}}
rominabaila 25.3 205
teodoramisan 69.1 206 === 4. Using siibra to retrieve connectivities from the EBRAINS KG ===
rominabaila 25.3 207
208 A simulation workflow where **siibra **is used to retrieve a connectivity from the EBRAINS KG. That connectivity is fed into a TVB Simulator, where the rest of the parameters (coupling, model, etc.) are set to default values.
209
rominabaila 26.1 210 {{html}}
paulapopa 57.1 211 <iframe width="1280" height="720" src="https://www.youtube.com/embed/hnqTpFGCYMg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
rominabaila 26.1 212 {{/html}}
213
teodoramisan 69.1 214 === 5. Run a workflow as an HPB job ===
rominabaila 26.1 215
216 A workflow simulation which is run remotely, by submitting a job to an HPC site and getting back the results (TimeSeries object).
217
paulapopa 57.1 218 {{html}}<iframe width="1280" height="720" src="https://www.youtube.com/embed/M6rZClFgRrM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>{{/html}}
rominabaila 26.1 219
Public

TVB Widgets