%pylab nbagg
from tvb.simulator.lab import *
import numpy
import tvb.datatypes.projections as projections
from scipy import io
Populating the interactive namespace from numpy and matplotlib INFO log level set to INFO 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 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 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 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 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 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 default contains values out of the declared domain. Ex 10.0 attribute tvb.simulator.models.wong_wang_exc_io_inh_i.ReducedWongWangExcIOInhI.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_io_inh_i.ReducedWongWangExcIOInhI.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.linear.Linear.state_variable_range = Final(field_type=<class 'dict'>, default={'x': array([-1, 1])}, 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 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.JCepileptor.JC_Epileptor.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.JCepileptor.JC_Epileptor.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.Zerlaut.Zerlaut_adaptation_first_order.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.Zerlaut_adaptation_second_order.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)
conn = connectivity.Connectivity.from_file()
conn_coupling = coupling.Linear(a=numpy.array([0.042]))
WARNING File 'hemispheres' not found in ZIP.
In this configuration the topology of the phase portrait features a stable fixed point (a stable spiral) with a characteristics frequency of approximately 10Hz. You can check it using the nice phase_plane_interactive tool ...
mod = models.Generic2dOscillator(a=numpy.array([-0.5]), b=numpy.array([-15.0]), c=numpy.array([0.0]), d=numpy.array([0.02]))
Selecting a deterministic integration scheme allows you to observe very clearly the effect of stimulation-driven activity. With a stochastic scheme, you may observe some neural reponses which are not due to stimulation but to noise fluctuations (uncontrolled reponses of the resting state).
hiss = noise.Additive(nsig = numpy.array([0.015]))
heunint = integrators.HeunStochastic(dt=2**-6, noise=hiss)
In TVB's connectivity demo dataset region 35 and 36 represent areas V1 and V2 respectively in the left hemisphere.
conn.configure()
nodes = [35, 36]
stim_weights = numpy.zeros((conn.number_of_regions, 1))
stim_weights[nodes] = numpy.array([3.5, 0.0])[:, numpy.newaxis]
eqn_t = equations.PulseTrain()
eqn_t.parameters["onset"] = 500.0 # ms
eqn_t.parameters["tau"] = 5.0 # ms
eqn_t.parameters["T"] = 500. # 0.002kHz repetition frequency
stimulus = patterns.StimuliRegion(temporal = eqn_t,
connectivity = conn,
weight = stim_weights)
Temporal Averaged time-series. By default only the first state variable is recorded for the Generic2dOscillator
model.
EEG (FIXME. By default pr = projections.ProjectionRegionEEG() should do all the tricks)
pr = projections.ProjectionSurfaceEEG.from_file()
ss = sensors.SensorsEEG.from_file(source_file="eeg_brainstorm_65.txt")
rm = region_mapping.RegionMapping.from_file()
rec = (monitors.TemporalAverage(period=1e3 / 2048.),
monitors.EEG(projection=pr, sensors=ss, region_mapping=rm, period=1e3/2048.))
Simulator
instance.¶def config_sim(stim=None):
sim = simulator.Simulator(model = mod,
connectivity = conn,
coupling = conn_coupling,
integrator = heunint,
monitors = rec,
stimulus = stim)
sim.configure()
return sim
run
function to perform the simulation¶def run_simulation(sim):
#Perform the simulation
tavg_data = []
tavg_time = []
eeg_data = []
eeg_time = []
for tavg, eeg in sim(simulation_length=2**10):
# approx 4 sec
if not tavg is None:
tavg_time.append(tavg[0])
tavg_data.append(tavg[1])
if not eeg is None:
eeg_time.append(eeg[0])
eeg_data.append(eeg[1])
return (tavg_data, tavg_time, eeg_data, eeg_time)
sim = config_sim()
out = run_simulation(sim)
TAVG = numpy.array(out[0])
tt = numpy.array(out[1])
EEG = numpy.array(out[2])
figure()
subplot(211)
plot(tt, TAVG[:, 0, nodes, 0])
title("Temporal Averaged time-series")
subplot(212)
plot(tt, EEG[:, 0, 60, 0], 'k')
title("EEG")
tight_layout()
Figure 1: TAVG and EEG traces (0z) resting state
sim = config_sim(stim=stimulus)
stout = run_simulation(sim)
STAVG = numpy.array(stout[0])
stt = numpy.array(stout[1])
SEEG = numpy.array(stout[2])
figure()
subplot(211)
plot(stt, STAVG[:, 0, nodes, 0])
title("Stim - Temporal Averaged time-series")
subplot(212)
plot(stt, SEEG[:, 0, 60, 0], 'k')
title("Stim - EEG")
Text(0.5, 1.0, 'Stim - EEG')
Figure 2: TAVG and EEG traces (0Z) under stimulation -- onset is @ 500 ms