%matplotlib widget
import os
import numpy
import matplotlib.pyplot as plt
from tvb.simulator.lab import *
The scripting interface has two interactive tools for looking at the TimeSeries generated in simulations. This tutorial shows an example of their use, using a demo dataset for region time-series.
These are mainly of use for longer simulations, of at least a few seconds.
As a simple set of example data, we will use a linear stochastic model with the default connectivity:
connectivity=connectivity.Connectivity.from_file()
connectivity.speed=numpy.array([1.0])
sim = simulator.Simulator(
connectivity=connectivity,
coupling=coupling.Linear(a=numpy.array([2e-4])),
integrator=integrators.EulerStochastic(dt=10.0),
model=models.Linear(gamma=numpy.array([-1e-2])),
monitors=(monitors.Raw(),),
simulation_length=60e3
).configure()
(time, data), = sim.run()
plt.figure()
plt.plot(time/1e3, data[:, 0, :, 0], 'k', alpha=0.1);
plt.xlabel('Time (s)')
WARNING File 'hemispheres' not found in ZIP.
Text(0.5, 0, 'Time (s)')
Because we just stored our simulation as a simple array, we need to turn it into one of TVB's TimeSeries datatypes, which is what the two plotting tools operate on, in this case we'll use TimeSeriesRegion.
tsr = time_series.TimeSeriesRegion(
data=data,
connectivity=sim.connectivity,
sample_period=sim.monitors[0].period / 1e3,
sample_period_unit='s')
tsr.configure()
tsr
value | |
---|---|
Dimensions | ('Time', 'State Variable', 'Region', 'Mode') |
Length | 60.0 |
Region Mapping | None |
Region Mapping Volume | None |
Sample period | 0.01 |
Source Connectivity | Connectivity gid: 6e3a920a-20b1-484b-8e96-68bc81f6031d |
Start time | 0 |
Time units | s |
Time-series name | TimeSeriesRegion gid: 9b424200-0a71-4c1f-b7b3-6490917d36da |
Time-series type | TimeSeriesRegion |
[min, median, max] | [-49.8224, -0.182784, 53.7502] |
dtype | float64 |
shape | (6000, 1, 76, 1) |
Our typical approach throughout these tutorials has been to to simply plot our time-series using PyLab's plot() function. This is fine as a quick way to look at the small amounts of data we'd been producing, but is insufficient for longer, more meaningful, time-series, such as we get when trying to runs simulations aimed at generating time-series comparable to experimental data.
TimeSeriesInteractive is a tool for looking at these longer time-series. It's still relatively simple, but it adds a number of useful features. The time-series are plotted in the main central panel with a constant vertical offset, the label for each channel or region displayed down the left hand side. Along the bottom are three basic controls: on the left there is a slider that allows the length of the window to be changed (in physical units); in the middle a set of buttons exist to step forward and backward through the time-series at different speeds (at the top of the window there is an indicator showing where you are in the time-series); and on the right the vertical spacing, or offset between time series can be set, this has the effect of scaling the time-series' amplitudes.
#Create and launch the interactive visualiser
import tvb.simulator.plot.timeseries_interactive as ts_int
tsi = ts_int.TimeSeriesInteractive(time_series=tsr)
tsi.configure()
tsi.show()
GridBox(children=(Output(layout=Layout(border='solid 1px black', margin='3px 3px 3px 3px', padding='2px 2px 2p…