Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions notebooks/BCT_metrics_projection.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "b572799a",
"metadata": {
"vscode": {
"languageId": "plaintext"
}
},
"outputs": [],
"source": [
"from tvb.datatypes.connectivity import Connectivity\n",
"from tvbwidgets.ui.bct.bct_metrics_widget import BCTMetricsProjectionWidget\n",
"\n",
"conn = Connectivity.from_file()\n",
"conn.configure()\n",
"\n",
"wid = BCTMetricsProjectionWidget(conn)\n",
"wid.display()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "67a11694-f552-4ae0-8d34-725a0c0c8405",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
24 changes: 24 additions & 0 deletions tvbwidgets/ui/bct/bct_compat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@

import numpy as np
import bct.algorithms.modularity as _bct_modularity
def apply_bct_patches():

if getattr(_bct_modularity, "_tvb_ls2ci_patched", False):
return

def _patched_ls2ci(ls, zeroindexed=False):
if ls is None or len(ls) == 0:
return ()

nr_indices = sum(map(len, ls))
ci = np.zeros((nr_indices,), dtype=int)
z = int(not zeroindexed)

for i, group in enumerate(ls):
for node in group:
ci[node] = i + z

return ci

_bct_modularity.ls2ci = _patched_ls2ci
_bct_modularity._tvb_ls2ci_patched = True
75 changes: 75 additions & 0 deletions tvbwidgets/ui/bct/bct_helper_widgets.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@

import numpy as np
import ipywidgets as widgets
import k3d

from tvbwidgets.ui.head_widget import HeadWidget
from tvbwidgets.ui.connectivity_matrix_editor_widget import ConnectivityMatrixEditor

class BCTConnectivityMatrixEditor(ConnectivityMatrixEditor):
"""ConnectivityMatrixEditor stripped to weights tab only."""

def __init__(self, connectivity, **kwargs):
super().__init__(connectivity, **kwargs)
self.tab.children = [self.tab.children[0]]
self.tab.set_title(0, "weights")

class BCTTractLengthsMatrixEditor(ConnectivityMatrixEditor):
"""ConnectivityMatrixEditor stripped to tract_lengths tab only.
"""

def __init__(self, connectivity, **kwargs):
super().__init__(connectivity, **kwargs)
self.tab.children = [self.tab.children[1]]
self.tab.set_title(0, "tract_lengths")

class ColoredConnectivityHeadWidget(HeadWidget):
"""HeadWidget with per-node coloring driven by BCT metric values."""

def __init__(self, datatypes, node_values=None, region_labels=None, **kwargs):
self.node_values = node_values
self.region_labels = region_labels
super().__init__(datatypes, **kwargs)

def _HeadWidget__draw_connectivity(self, connectivity):
self._centres = connectivity.centres
self._labels = (
self.region_labels if self.region_labels is not None
else connectivity.region_labels
)

values = self.node_values if self.node_values is not None else np.ones(len(connectivity.centres))
values = np.array(values, dtype=float)
values[np.isinf(values)] = 0
values[np.isnan(values)] = 0
self._values = values

vmin, vmax = float(values.min()), float(values.max())
if vmin == vmax:
vmin -= 0.5
vmax += 0.5

self._points_obj = k3d.points(
connectivity.centres,
point_size=8,
shader='dot',
attribute=values,
color_map=k3d.matplotlib_color_maps.viridis,
color_range=[vmin, vmax],
)

edge_indices = np.nonzero(connectivity.weights)
edges = list(zip(edge_indices[0], edge_indices[1]))
lines = k3d.lines(
connectivity.centres,
indices=edges,
shader='simple',
color=0xffffff,
width=2,
)

self.plot += self._points_obj
self.plot += lines

def display(self):

Check failure on line 74 in tvbwidgets/ui/bct/bct_helper_widgets.py

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Add a nested comment explaining why this method is empty, or complete the implementation.

See more on https://sonarcloud.io/project/issues?id=the-virtual-brain_tvb-widgets&issues=AZ8yRgtclWsfFY_QQ0C_&open=AZ8yRgtclWsfFY_QQ0C_&pullRequest=103
pass
Loading
Loading