from mpl_toolkits.mplot3d import Axes3D
%pylab nbagg
from tvb.simulator.lab import *
Populating the interactive namespace from numpy and matplotlib INFO NumExpr defaulting to 3 threads. WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.epileptor.Epileptor.state_variable_range = Final(field_type=<class 'dict'>, default={'x1': array([-2., 1.]), 'y1': array([-20., 2.]), 'z': array([2., 5.]), 'x2': array([-2., 0.]), 'y2': array([0., 2.]), 'g': array([-1., 1.])}, required=True) WARNING default contains values out of the declared domain. Ex 1.0 attribute tvb.simulator.models.epileptor.Epileptor2D.tt = NArray(label='tt', dtype=float64, default=array([1.]), dim_names=(), ndim=None, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.epileptor.Epileptor2D.state_variable_range = Final(field_type=<class 'dict'>, default={'x1': array([-2., 1.]), 'z': array([2., 5.])}, required=True) WARNING default contains values out of the declared domain. Ex 1.0 attribute tvb.simulator.models.epileptor_rs.EpileptorRestingState.gamma_rs = NArray(label=":math:'\\gamma_rs'", dtype=float64, default=array([1.]), dim_names=(), ndim=None, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.epileptor_rs.EpileptorRestingState.state_variable_range = Final(field_type=<class 'dict'>, default={'x1': array([-1.8, -1.4]), 'y1': array([-15, -10]), 'z': array([3.6, 4. ]), 'x2': array([-1.1, -0.9]), 'y2': array([0.001, 0.01 ]), 'g': array([-1., 1.]), 'x_rs': array([-2., 4.]), 'y_rs': array([-6., 6.])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.epileptorcodim3.EpileptorCodim3.state_variable_range = Final(field_type=<class 'dict'>, default={'x': array([0.4, 0.6]), 'y': array([-0.1, 0.1]), 'z': array([0. , 0.15])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.epileptorcodim3.EpileptorCodim3SlowMod.state_variable_range = Final(field_type=<class 'dict'>, default={'x': array([0.4, 0.6]), 'y': array([-0.1, 0.1]), 'z': array([0. , 0.1]), 'uA': array([0., 0.]), 'uB': array([0., 0.])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.hopfield.Hopfield.state_variable_range = Final(field_type=<class 'dict'>, default={'x': array([-1., 2.]), 'theta': array([0., 1.])}, required=True) WARNING default contains values out of the declared domain. Ex 0.12 attribute tvb.simulator.models.jansen_rit.JansenRit.p_min = NArray(label=':math:`p_{min}`', dtype=float64, default=array([0.12]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 0.32 attribute tvb.simulator.models.jansen_rit.JansenRit.p_max = NArray(label=':math:`p_{max}`', dtype=float64, default=array([0.32]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 0.22 attribute tvb.simulator.models.jansen_rit.JansenRit.mu = NArray(label=':math:`\\mu_{max}`', dtype=float64, default=array([0.22]), dim_names=(), ndim=None, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.jansen_rit.JansenRit.state_variable_range = Final(field_type=<class 'dict'>, default={'y0': array([-1., 1.]), 'y1': array([-500., 500.]), 'y2': array([-50., 50.]), 'y3': array([-6., 6.]), 'y4': array([-20., 20.]), 'y5': array([-500., 500.])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.jansen_rit.ZetterbergJansen.state_variable_range = Final(field_type=<class 'dict'>, default={'v1': array([-100., 100.]), 'y1': array([-500., 500.]), 'v2': array([-100., 50.]), 'y2': array([-100., 6.]), 'v3': array([-100., 6.]), 'y3': array([-100., 6.]), 'v4': array([-100., 20.]), 'y4': array([-100., 20.]), 'v5': array([-100., 20.]), 'y5': array([-500., 500.]), 'v6': array([-100., 20.]), 'v7': array([-100., 20.])}, required=True) WARNING default contains values out of the declared domain. Ex -0.01 attribute tvb.simulator.models.larter_breakspear.LarterBreakspear.TCa = NArray(label=':math:`T_{Ca}`', dtype=float64, default=array([-0.01]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 0.3 attribute tvb.simulator.models.larter_breakspear.LarterBreakspear.TNa = NArray(label=':math:`T_{Na}`', dtype=float64, default=array([0.3]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 2.0 attribute tvb.simulator.models.larter_breakspear.LarterBreakspear.aei = NArray(label=':math:`a_{ei}`', dtype=float64, default=array([2.]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 2.0 attribute tvb.simulator.models.larter_breakspear.LarterBreakspear.aie = NArray(label=':math:`a_{ie}`', dtype=float64, default=array([2.]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 1.0 attribute tvb.simulator.models.larter_breakspear.LarterBreakspear.ane = NArray(label=':math:`a_{ne}`', dtype=float64, default=array([1.]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 0.3 attribute tvb.simulator.models.larter_breakspear.LarterBreakspear.Iext = NArray(label=':math:`I_{ext}`', dtype=float64, default=array([0.3]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 1.0 attribute tvb.simulator.models.larter_breakspear.LarterBreakspear.QV_max = NArray(label=':math:`Q_{max}`', dtype=float64, default=array([1.]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 1.0 attribute tvb.simulator.models.larter_breakspear.LarterBreakspear.QZ_max = NArray(label=':math:`Q_{max}`', dtype=float64, default=array([1.]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 1.0 attribute tvb.simulator.models.larter_breakspear.LarterBreakspear.t_scale = NArray(label=':math:`t_{scale}`', dtype=float64, default=array([1.]), dim_names=(), ndim=None, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.larter_breakspear.LarterBreakspear.state_variable_range = Final(field_type=<class 'dict'>, default={'V': array([-1.5, 1.5]), 'W': array([-1.5, 1.5]), 'Z': array([-1.5, 1.5])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.linear.Linear.state_variable_range = Final(field_type=<class 'dict'>, default={'x': array([-1, 1])}, required=True) WARNING default contains values out of the declared domain. Ex 1.0 attribute tvb.simulator.models.oscillator.Generic2dOscillator.gamma = NArray(label=':math:`\\gamma`', dtype=float64, default=array([1.]), dim_names=(), ndim=None, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.oscillator.Generic2dOscillator.state_variable_range = Final(field_type=<class 'dict'>, default={'V': array([-2., 4.]), 'W': array([-6., 6.])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.oscillator.Kuramoto.state_variable_range = Final(field_type=<class 'dict'>, default={'theta': array([0. , 6.28318531])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.oscillator.SupHopf.state_variable_range = Final(field_type=<class 'dict'>, default={'x': array([-5., 5.]), 'y': array([-5., 5.])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.stefanescu_jirsa.ReducedSetFitzHughNagumo.state_variable_range = Final(field_type=<class 'dict'>, default={'xi': array([-4., 4.]), 'eta': array([-3., 3.]), 'alpha': array([-4., 4.]), 'beta': array([-3., 3.])}, required=True) WARNING default contains values out of the declared domain. Ex 1.0 attribute tvb.simulator.models.stefanescu_jirsa.ReducedSetHindmarshRose.a = NArray(label=':math:`a`', dtype=float64, default=array([1.]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 3.0 attribute tvb.simulator.models.stefanescu_jirsa.ReducedSetHindmarshRose.b = NArray(label=':math:`b`', dtype=float64, default=array([3.]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 1.0 attribute tvb.simulator.models.stefanescu_jirsa.ReducedSetHindmarshRose.c = NArray(label=':math:`c`', dtype=float64, default=array([1.]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 3.3 attribute tvb.simulator.models.stefanescu_jirsa.ReducedSetHindmarshRose.mu = NArray(label=':math:`\\mu`', dtype=float64, default=array([3.3]), dim_names=(), ndim=None, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.stefanescu_jirsa.ReducedSetHindmarshRose.state_variable_range = Final(field_type=<class 'dict'>, default={'xi': array([-4., 4.]), 'eta': array([-25., 20.]), 'tau': array([ 2., 10.]), 'alpha': array([-4., 4.]), 'beta': array([-20., 20.]), 'gamma': array([ 2., 10.])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.wilson_cowan.WilsonCowan.state_variable_range = Final(field_type=<class 'dict'>, default={'E': array([0., 1.]), 'I': array([0., 1.])}, required=True) WARNING default contains values out of the declared domain. Ex 0.27 attribute tvb.simulator.models.wong_wang.ReducedWongWang.a = NArray(label=':math:`a`', dtype=float64, default=array([0.27]), dim_names=(), ndim=None, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.wong_wang.ReducedWongWang.state_variable_range = Final(field_type=<class 'dict'>, default={'S': array([0., 1.])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.wong_wang.ReducedWongWang.state_variable_boundaries = Final(field_type=<class 'dict'>, default={'S': array([0., 1.])}, required=True) WARNING default contains values out of the declared domain. Ex 10.0 attribute tvb.simulator.models.wong_wang_exc_inh.ReducedWongWangExcInh.tau_i = NArray(label=':math:`\\tau_i`', dtype=float64, default=array([10.]), dim_names=(), ndim=None, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.wong_wang_exc_inh.ReducedWongWangExcInh.state_variable_range = Final(field_type=<class 'dict'>, default={'S_e': array([0., 1.]), 'S_i': array([0., 1.])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.wong_wang_exc_inh.ReducedWongWangExcInh.state_variable_boundaries = Final(field_type=<class 'dict'>, default={'S_e': array([0., 1.]), 'S_i': array([0., 1.])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.zerlaut.ZerlautFirstOrder.state_variable_range = Final(field_type=<class 'dict'>, default={'E': array([0. , 0.1]), 'I': array([0. , 0.1]), 'W': array([ 0., 100.])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.simulator.models.zerlaut.ZerlautSecondOrder.state_variable_range = Final(field_type=<class 'dict'>, default={'E': array([0. , 0.1]), 'I': array([0. , 0.1]), 'C_ee': array([0., 0.]), 'C_ei': array([0., 0.]), 'C_ii': array([0., 0.]), 'W': array([ 0., 100.])}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.datatypes.time_series.TimeSeries.labels_dimensions = Attr(field_type=<class 'dict'>, default={}, required=True) WARNING Field seems mutable and has a default value. Consider using a lambda as a value factory attribute tvb.datatypes.projections.ProjectionMatrix.conductances = Attr(field_type=<class 'dict'>, default={'air': 0.0, 'skin': 1.0, 'skull': 0.01, 'brain': 1.0}, required=False) WARNING default contains values out of the declared domain. Ex 1.0 attribute tvb.simulator.coupling.HyperbolicTangent.b = NArray(label=':math:`b`', dtype=float64, default=array([1.]), dim_names=(), ndim=None, required=True) WARNING default contains values out of the declared domain. Ex 1.0 attribute tvb.simulator.coupling.Kuramoto.a = NArray(label=':math:`a`', dtype=float64, default=array([1.]), dim_names=(), ndim=None, required=True)
Candidate for new tutorial on visualizing all elements of the data set
To be sure of the accuracy of forward solution for M/EEG, it is important to verify the geometry of the sources and sensors, as well as the boundaries. Here, we plot these elements of the forward solution for TVB's default dataset.
First, we load the data
sens_meg = sensors.SensorsMEG.from_file()
conn = connectivity.Connectivity.from_file()
skin = surfaces.SkinAir.from_file()
skin.configure()
sens_eeg = sensors.SensorsEEG.from_file()
sens_eeg.configure()
WARNING File 'hemispheres' not found in ZIP.
then, plot the different elements
figure()
ax = subplot(111, projection='3d')
# ROI centers as black circles
x, y, z = conn.centres.T
ax.plot(x, y, z, 'ko')
# EEG sensors as blue x's
x, y, z = sens_eeg.sensors_to_surface(skin).T
ax.plot(x, y, z, 'bx')
# Plot boundary surface
x, y, z = skin.vertices.T
ax.plot_trisurf(x, y, z, triangles=skin.triangles, alpha=0.1, edgecolor='none')
# MEG sensors as red +'s
x, y, z = sens_meg.locations.T
ax.plot(x, y, z, 'r+')
[<mpl_toolkits.mplot3d.art3d.Line3D at 0x7fb7bb0f12d0>]
More visualizations to come:
volume data -> MRI acquisition -> Registration -> Coordinates transform to MNI space | -- voxel-based gray matter parcellation (obtain parcellation mask) -> AAL/anatomical template
surfaces data (cortical, skull, skin surfaces extraction) -> FSL/BET
connectivity data (white matter weights, tract-lengths) -> Diffusion Toolkit + TrackVis
region mapping between parcellation and number of vertices in the cortical surface.
lead-field matrices (ie, projection matrices) mapping nodes onto EEG/MEG space