# change to the root directory of the project
import os
if os.getcwd().split("/")[-1] == "examples":
os.chdir('..')
%load_ext autoreload
%autoreload 2
try:
import matplotlib.pyplot as plt
except ImportError:
import sys
!{sys.executable} -m pip install matplotlib
import matplotlib.pyplot as plt
import numpy as np
# Let's import the Hopf model
from neurolib.models.hopf import HopfModel
# Some useful functions are provided here
import neurolib.utils.functions as func
# a nice color map
plt.rcParams['image.cmap'] = 'plasma'
Single node simulation
model = HopfModel()
model.params['duration'] = 1.0*1000
model.params['sigma_ou'] = 0.03
model.run()
plt.plot(model.t, model.x.T, c='k', lw = 2)
# alternatively plot the results in the xarray:
# plt.plot(hopfModel.xr[0, 0].time, hopfModel.xr[0, 0].values)
plt.xlabel("t [ms]")
plt.ylabel("Activity")
Bifurcation diagram
model = HopfModel()
model.params['duration'] = 2.0*1000
max_x = []
min_x = []
# these are the different input values that we want to scan
a_s = np.linspace(-2, 2, 50)
for a in a_s:
model.params['a'] = a
model.run()
# we add the maximum and the minimum of the last second of the
# simulation to a list
max_x.append(np.max(model.x[0, -int(1000/model.params['dt']):]))
min_x.append(np.min(model.x[0, -int(1000/model.params['dt']):]))
plt.plot(a_s, max_x, c='k', lw = 2)
plt.plot(a_s, min_x, c='k', lw = 2)
plt.title("Bifurcation diagram of the Hopf oscillator")
plt.xlabel("a")
plt.ylabel("Min / max x")
Brain network
from neurolib.utils.loadData import Dataset
ds = Dataset("hcp")
model = HopfModel(Cmat = ds.Cmat, Dmat = ds.Dmat)
model.params['w'] = 1.0
model.params['signalV'] = 0
model.params['duration'] = 20 * 1000
model.params['sigma_ou'] = 0.14
model.params['K_gl'] = 0.6
model.run(chunkwise=True)
plt.plot(model.t, model.x[::5, :].T, alpha=0.8);
plt.xlim(0, 200)
plt.xlabel("t [ms]")
fig, axs = plt.subplots(1, 2, figsize=(8, 2))
axs[0].imshow(func.fc(model.x[:, -10000:]))
axs[1].plot(model.t, model.x[::5, :].T, alpha=0.8);
scores = [func.matrix_correlation(func.fc(model.x[:, -int(5000/model.params['dt']):]), fcemp) for fcemp in ds.FCs]
print("Correlation per subject:", [f"{s:.2}" for s in scores])
print("Mean FC/FC correlation: {:.2f}".format(np.mean(scores)))